前回書いた記事のリダイレクト部分を詳しく。
とりあえず書いたら動くけど、わかってないとちょっと気持ち悪いよね。
解説
下記のリダイレクトについて説明します。
- http://→https://へリダイレクト
- www.ありからwww.なしへリダイレクト
- /index.htmlありから/index.htmlなしにリダイレクト
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://example.com/$1 [R=301,L]
リダイレクトは大きく分けて3つから成り立っています。
①書き換え開始の宣言
RewriteEngine on
書き換え開始の宣言です。
これを書くことで、リダイレクト機能を有効にします。
②実行条件の指定
RewriteCond
書き換えする条件(対象)を指定します。
③転送ルール
RewriteRule
転送先を指定します。
[R=301,L]
301リダイレクトをして処理を終了。
実行条件の指定について詳しく
次に実行条件の指定(RewriteCond)について詳しく見ていきたいと思います。
http://からリダイレクト
RewriteCond %{HTTPS} off
httpsではない接続の場合にリダイレクト対象とする。
www.ありからリダイレクト
RewriteCond %{HTTP_HOST} ^www\.example\.com$
つまり、www.example.comで始まっているURLに接続した場合にリダイレクト対象とする。
/index.htmlありからリダイレクト
RewriteCond %{THE_REQUEST} ^.*/index.html
つまり、なんちゃらかんちゃら/index.htmlで終わっているURLに接続した場合にリダイレクト対象とする。
転送ルールについて詳しく
次に転送ルールの指定(RewriteRule)について詳しく見ていきたいと思います。
https://へリダイレクト
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
つまり、どこかしらにアクセスがあったらhttps://対象ドメインのどこかしらと同じパスに転送してくださいという意味。
www.なしへリダイレクト
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
$1は後方参照です。
グループ化された任意の文字列の後方を参照しています。
例えば、www.example.com/example.htmlにアクセスがあった場合、https://example.com/example.htmlへリダイレクトします。
/index.htmlなしへリダイレクト
RewriteRule ^(.*)index.html$ https://example.com/$1 [R=301,L]
$1は後方参照、つまりグループ化された任意の文字列の後方を参照しているので、https://example.com/うんたら/かんたら/index.htmlにアクセスがあった場合、https://example.com/うんたら/かんたら/へリダイレクトします。
全部まとめて書くと
冒頭にも書きましたが、全部まとめて書くとこうなります。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://example.com/$1 [R=301,L]
小話
思いのほか記事が長くなった……。
正規表現ややこしいので、原理だけわかってたらコピペが簡単だなぁと改めて思いました。


コメント