wwwやらhttpsやらindex.htmlやらのURLを.htaccessで正規化調整してて、どうしてもindex.htmlとindex.phpを「/」に飛ばす処理が効かなかった。
そして行き着いたのが、「# BEGIN WordPress〜」の上(記述前?)に記述したら良いとな。
記述してみる。。
わーい!ちゃんとリダイレクト処理された!
ということで、wordpressでwwwありでhttpsでindex.htmlとindex.phpは「/」でリダイレクトできるコードを貼り付けとく。
ついでにその他リダイレクトしたいURLがあったときの記述も書いとく。
# httpsに設定
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# wwwありに設定
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# index.htmlとindex.phpをリダイレクト
RewriteCond %{THE_REQUEST} ^.*/index.(html|php)
RewriteRule ^(.*)index.(html|php)$ https://%{HTTP_HOST}/$1 [R=301,L]
# その他リダイレクト
RewriteEngine on
Redirect permanent <トップにリダイレクトしたいURL> /
Redirect permanent /リダイレクトしたいページ /リダイレクト先ページ
# BEGIN WordPress
はじめから入ってたWordPressのコードたち
# END WordPress
「このサイトはwwwだから〜」って
RewriteRule ^(.*)index.(html|php)$ https://www%{HTTP_HOST}/$1 [R=301,L]
って記述すると、「https://www.wwwURL/」ってwwwがダブルで付いてしまったから、wwwは付けない。
ちなみに、wwwなしのサイトのときは
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,L]
wwwなしのときは「!」マークがないのね。「URLにwwwがついてたとき〜」って意味か。
http:は、httpsのリダイレクト処理してれば記述はhttpsでもどっちでもいいかな。httpsだったらなんとなくhttpsにしたい気がする。
そんなこんなでwordpressのときのURL正規化するときは、.htaccessのWordPressと記述より前に記述すると良いよ〜。後に書くとindex.htmlとindex.phpのリダイレクト処理が効かないよ〜。(他は効くのになんでだろね〜)
index.phpは表示されても気にしない人はこんな書き方もあるよ
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html?$ / [R=301,L] ←これを追加。
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
wordpressの記述の「RewriteRule ^index.php$ – [L]」の前に「RewriteRule ^index.html?$ / [R=301,L]」を追加で記述すると、index.htmlはリダイレクトされて「/」に飛びます。
いろんな書き方がありますね〜。