WordPressのSSL化で.htaccessに301リダイレクトを記述する位置に注意
少し前の記事で常時SSL化の対応について書いたのですが、
その時、悩まされた場面がありました。
常時SSL化対応で.htaccessへリダイレクト処理を記述したのですが、
WordPressのsingle.phpやcategory.phpに
301リダイレクトが効かないという残念な感じに...。
301リダイレクトの記述をしたのに効かない
一通り作業をして本番環境で動作確認!という時に
.htaccessに301リダイレクト処理を記述したのに、singleやcategoryで効いていないことが発覚...。
ちゃんと記述したし、他のページはうまく動いてるのに!!!
ちなみに301リダイレクトの記述内容はこんな感じ。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
この記述をしているのに、 single.phpやcategory.phpなど特定のページになぜか効かないんです...。
DBや.htaccessファイルを触ったり、本番環境での作業も多いのでうまく動作しないと非常に焦る...。
いろいろ検索してみましたが原因が分からず、その場にいた先輩に相談。
どうやら.htaccessへの記述位置が問題だったようです。
WordPressの301リダイレクトがうまくいかないのは
記述位置のせいだった
WordPressの.htaccessを開いてみると、
おそらく下記のように記述されているかと思います。
(WordPressがインストールされているディレクトリや位置によって多少違いはありますが、だいたいこんな内容のはず。)
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
で、この.htaccessに301リダイレクトの記述をするわけですが
どの位置に書けばいいのか分からなかったのです...。
上記の記述は、WordPressが動作するために
大事な記述なんだということは頭にあったので、
とりあえず下に書いておけばいっか~(・ω・)
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
(・ω・)
なんで動かへんねん。。。
こちとら毎日サービス残業で早く帰りたいのに。。。
(;ω;)
検索してもわからない。。。
もうお家に帰れないかもしれない。。。
一番上に記述してみる
先輩に相談したところ
「一番上に書いてみたら~?」って。
.htaccessはデリケートなファイルなので、
意外と記述位置も大事だったりする とのこと。
ええい!一番上に書いてやったんだから
ちゃんとリダイレクトせい~!(;ω;´)
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
リダイレクトした(・ω・)♡
まとめ
301リダイレクトの記述に限らず、
.htaccessへの記述は位置に注意した方が良さそうです。
.htaccessはサイトを真っ白にクラッシュさせてしまうこともあるので
扱いには気をつけましょうね...。
私はおかげでお家に帰れました。
まぁいつも22時とかなんですけど。