.htaccess でwwwありなし、index.htmlありなし、httpsのURLの正規化をしてもロリポップサーバーで効かない時の対処法
ロリポップサーバーで担当者が蒸発したホームページのSSL化をしてくれと頼まれた。
担当者の蒸発はよくある話なので、マネージドレンタルサーバーの大手のロリポップ、クリック一発でサクッと終わるだろうと思っていたら意外と手こずったのでメモ。
まずはSSL化。クリック一発。ロリポップでSSLは無料なので何の問題もなし。
次に.htaccessで wwwなし。index.htm を表示させない。httpでアクセスした時にhttpsに転送する。
をした。
<IfModule mod_rewrite.c>
RewriteEngine On
#indexなし
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^(.*)index.(html|htm|php)$ https://%{HTTP_HOST}/$1 [R=301,L]
#wwwなし
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
#https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
いつもの作業なので、これは問題なく終わった。
はずだった….
動作チェックをして、いる時に
http://xxxxx.com → https://xxxxx.com へリダイレクトされ問題なし!
http://xxxxx.com/index.htm → https://xxxxx.com へリダイレクトされ問題なし!
https://xxxxx.com/index.htm → https://xxxxx.com へリダイレクトされ問題なし!
https://www.xxxxx.com → https://www.xxxxx.com のまま、www無しへリダイレクトされず!
http://www.xxxxx.com/index.htm → http://www.xxxxx.com/index.htm のまま www無し、index.htm無しへリダイレクトされず!
.htaccess がwwwの時に効いてない。なぜ?
htaccessが効かない理由はロリポップサーバーの仕様のせいだった。
結論的に、www付きのサーバー上の参照ディレクトリと、www無しの参照ディレクトリが違うのが問題だったのだ。
なぜかwww付きはサブドメイン扱いになっている。
ロリポップサーバーにログイン。
「サーバーの管理・設定」→「独自ドメイン設定」を見てみよう。
ドメイン横の「確認・変更」を押すと、変更できる。
http://xxxxx.com の「公開(アップロード)フォルダ」は「xxxxx.com」になっている。
そして「xxxxx.com」フォルダの中に「.htaccess」を入れている。なので問題なくリダイレクトされていたわけだ。
ふむふむ。問題なし。
次に、「サーバーの管理・設定」→「サブドメイン設定」を見てみよう。
ここではwww付きにアクセスされた時に参照される「公開(アップロード)フォルダ」を設定できる。
今回は、ここでスペルミスをしていたので、別ディレクトリを参照してしまっていて、www有りのURLでは.htaccess が効かなかったわけだ。
前任の担当者が蒸発する前に、何をしていたのか分からないので、なぜディレクトリが別になっていたのか不明だが、今回はwwwありなしを同じディレクトリに設定すると見事に解決した。
単純な事だった。
ロリポップサーバーでURLの正規化ができない、wwwをつけると更新が反映されない時は?
この時も.htaccess の場合と同じで、wwwありの参照ディレクトリと、wwwなしの参照ディレクトリが異なっていて、一方のディレクトリにのみアップロードされているためだ。