301リダイレクト構文

こんにちは!
各サイトさんのおかげで少しずつHTMLがわかってきたような気がするココロです。

このページでは、

301リダイレクトで
httpからhttpsに転送、さらに

・ ~/index.html

・ ~/index.php

・ ~.html

・ ~.php

の拡張子つきのURLを拡張子なしのURLへと転送してhttpからhttpsに、そしてリダイレクト回数を1回だけで301リダイレクトhtaccess構文を記述している後学的なメモページです。

※「https→indexとhtml,php全て」のエラーの1部を修復しました ※

※ 本ページはプロモーションを
  含んでいます

【 URL転送例 】 ※ 転送1回 ※

http://~.com/index.html

      

https://~.com/

http://~.com/index.php

      

https://~.com/

http://~.com/aa/bb.html

      

https://~.com/aa/bb

http://~.com/aa/bb.php

      

https://~.com/aa/bb

【転送例のイメージ】

それぞれを分解すると、

【 httpをhttpsつきのURLへ 】

http://~.com/

      

https://~.com/

【 ndex.htmlなしのURLへ 】

http://~.com/index.html

      

https://~.com/

【 ndex.phpなしのURLへ 】

http://~.com/index.php

      

https://~.com/

【 .htmlなしのURLへ 】

http://~.com/aa/bb.html

      

https://~.com/aa/bb

【 .phpなしのURLへ 】

http://~.com/aa/bb.php

      

https://~.com/aa/bb

【 リダイレクト回数は1回 】

各それぞれの301リダイレクトの
転送回数は1回のみ

こんな感じで301リダイレクトをかけた際に、 「 全部まとめてそれぞれのURLの転送回数を1回だけにできなものか?! 」 と構文を考えてみました。条件の構文はもう少し減らせるような気がしていまして、今後の勉強のために備忘録として下記にコードをお伝えしているページです。

後学用の備忘録としてのメモですので、もし使ってくださる際は少し前置きが長くなるのですけど下の 「まえおき」 をご理解・ご了承いただいてからお願いします。

【 まえおき 】

最近は各サイトさんの情報のおかげで少しずつHTML関係のことがわかってきたような気はしているものの…、ぶっちゃけ未だにあんまり詳しくありません。

条件の構文をもう少しまとめることができるような気がしていまして、後学を兼ねた備忘録としてのメモです。そのため一切の責任はもてないのですけど、それでもこの構文を気に入ってもらえましたら下の構文をコピーして使ってやってください。

「構文の順番」もキーになっているっぽいです。下の、

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

この構文の順番を変更するとうまく動作しない場合があります。

一応、
.htaccess check - Syntax checker for Apache .htaccess files さんにてhtaccess構文のエラーチェックはOKです。私自身のサイトでも正しく転送していることも確認しています。ただ、高度なエラーチェックでは機能していない条件もあります。

※「https→indexとhtml,php全て」のエラーの1部を修復しました ※

もし下記のコードを設置されていなくてコードが反映されない場合は、

AddHandler server-parsed .html

をコードの最後の行に追加してみてください。htaccessは全角スペースが含まれていてはいけませんので、そのあたりもご確認されることをお勧めします。

htaccessファイルは重要なファイルですから、もしお試しになられる場合は仮想環境やサブドメインのサイトなどで動作確認をしてからお願いします。

≪リストからジャンプ≫

https→index,html非表示

【 httpをhttpsにして、index.htmlと.htmlを非表示 】

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://(ご自身のドメインまたはサブドメイン)$1 [R=301,L]

RewriteCond %{HTTPS} off [OR]
RewriteCond %{THE_REQUEST} ^.*\.html
RewriteRule ^(.*)\.html$ https://(ご自身のドメインまたはサブドメイン)$1 [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

https→index,php非表示

【 httpをhttpsにして、index.phpと.phpを非表示 】

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php https://(ご自身のドメインまたはサブドメイン)$1 [R=301,L]

RewriteCond %{HTTPS} off [OR]
RewriteCond %{THE_REQUEST} ^.*\.php
RewriteRule ^(.*)\.php$ https://(ご自身のドメインまたはサブドメイン)$1 [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

https,index,html,php全て

【 httpをhttpsにして、index.htmlとindex.php、.htmlと.phpを非表示 】

※ エラーの1部を修復しました ※

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{THE_REQUEST} ^.*(/index.html|/index.php)
RewriteRule ^(.*)(index.html$|index.php) https://(ご自身のドメインまたはサブドメイン)$1 [R=301,L]

RewriteCond %{HTTPS} off [OR]
RewriteCond %{THE_REQUEST} ^.*(\.html|\.php)
RewriteRule ^(.*)(\.html$|\.php$) https://(ご自身のドメインまたはサブドメイン)$1 [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.html -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule ^(.*)$ $1(.html|.php)

もし、htmlかphpファイルのどちらか1つだけを使う場合は 「 (/index.html|/index.php) 」 の部分で (○○○|△△△)(   |   ) 「 ( 」 と 「 | 」 と 「 ) 」を消して 「 〇〇〇 」「 △△△ 」 のどちらか1つを消せばOKです。

OR条件を入れているため、

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

この構文の順番の位置を変えてしまうとリダイレクト回数が増えてしまったり、エラーがかかる場合があります。

https://(ご自身のドメインまたはサブドメイン)の所でご自身のドメインまたはサブドメインが 「 http 」 から始まるURLの場合は、

http://(ご自身のドメインまたはサブドメイン)」

とhttpsをhttpに変更すればOKです。

htaccess構文エラーチェック

htaccess構文のエラーチェックをしてくれるサイトさんです。

.htaccess check - Syntax checker for Apache .htaccess files

リダイレクトの回数を測定してくれるサイトさんです。

リダイレクトチェッカー - Web便利ツール@ABASHI

併せてcanonicalの設定もしておくとよりいいと思います。私はcanonicalタグによるURL正規化とは?link rel=canonicalの使い方さんのサイトを参考にさせていただきました。htaccessの構文を考える際に助けてもらった各サイトさんの全てを書ききれないのが残念ですが、中でも特に参考になった情報を記載してくださっているサイトさんをご紹介させていただきます。

【 参考にさせていただいたURL 】

.htaccess の使い方・設定方法
.htaccessのリダイレクトを分かりやすく - 正規表現
正規表現:文字列を「含まない」否定の表現まとめ
ホームページURLをindex.htmlあり・なしに統一する方法
正規表現の勘所―わかりづらい記法の覚え方、先読みや後読みの実践(1)
サイトURLから.htmlや.phpなどの拡張子を非表示にする方法
canonicalタグとは?意味や書き方・設定方法など徹底解説!

おわりに

大前提として各サイトさんのおかげでこの構文を考えることができました。各サイトさんに感謝しています。

一応AIさんにもhtaccess構文のチェックをかけてもらうように協力依頼をかけたところ、試してみたら意図する動作とは違う結果になったこともあって「あーでもない、こーでもない」と自分で実験しながら考えました。私自身のサイトでは動作確認をしたところ正しく転送しているみたいでOKでした。

実験中には500番台のエラーがかかったりしたこともあるので、どうか本チャンの環境の前に動作確認などの確認をお願いいたします。

ちなみに 「 400番台や500番台などのエラーがかかった時 」 にタイミングわるくindex登録されることもあるとのことで、htaccessファイルは重要なファイルですから慎重に取り扱ってくださいますようお願いいたします。

AIさんとの相互協力によってこれからHTMLやWEB関係のお仕事などがスムーズになると思います。予測ですけど自身のサイトを持っているとさらに相乗効果が見込めるのではないでしょうか…。なにも責任は持てませんけども、その時にこのメモがどなたかのお役に立てれば幸いです。

みんなが笑顔になる世界になりますように。とあるココロの転送目録でした(*^ω^)

もし、このページの情報が少しでも役に立ちそうだな、役に立ったな、と思ってもらえましたら、気になる広告をポチりとクリックしてやってください。(。・ω・。)ノ凸”

記事を書く励みになります!
よろしくお願いします。
(* . .)⁾⁾ペコリっ