GMOのレンタルサーバーでwordpressを使っていて、常時SLLにしようとしたときに意外とつまずいたのでメモ。解決策だけコピペしたいひとは目次から解決策に飛んでください。
原因
こちら、(これだと自分の環境では、リダイレクトが繰り返し行われて無限ループしました)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # BEGIN WordPress # "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は # 動的に生成され、WordPress フィルターによってのみ修正が可能です。 # これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
よくみるwordpressの.htaccessファイルに常時SSLのためのリダイレクト(1-3行目)が書かれています。
ただ、調べるとレンタルサーバーによって書き方が少しずつ違うみたいで、自分の環境(GMO)用のやり方を見つけるまでてこずりました。
2行目の%{HTTPS}でHTTPSという環境変数を取得しようとしていますが、GMOの環境ではこのままだとサーバー変数をさがすみたい。
環境変数であるHTTPSを取得するために%{ENV:HTTPS}をつかったら無限ループが解けました。
解決策
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
RewriteEngine On RewriteCond %{ENV:HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # BEGIN WordPress # "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は # 動的に生成され、WordPress フィルターによってのみ修正が可能です。 # これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
2行目が%{ENV:HTTPS}になっています。