【wordpress】URL正規化.htaccessでindex.htmlの処理がきかない、、うまくリダイレクトしない〜ってハマったメモ。

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はリダイレクトされて「/」に飛びます。
いろんな書き方がありますね〜。