いきなり結論から
VPSでバーチャルホストを設定するときは、*.confファイルに ServerAlias
もちゃんと書こうね!
<VirtualHost *:80>
ServerName sample1.net
ServerAlias www.sample1.net ← これ大事
DocumentRoot /var/www/sample1.net
</VirtualHost>
そしてこうだ!!
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.sample1\.net
RewriteRule ^(.*)$ http://sample1.net/$1 [R=301,L]
どういうこと?
タイトルのままなんですが、一つのVPSサーバーで複数サイトを運営しており、その中の一つをSSL化した際、.htaccessを使ってURLの正規化(http → https)をやってたら、wwwも無くしてという話になりました。
いろんなサイトの .htaccessの書き方を見てやってみました。
RewriteEngine On
# httpsに統一
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
# wwwなしに統一
RewriteCond %{HTTP_HOST} ^www.sample1\.net
RewriteRule ^(.*)$ http://sample1.net/$1 [R=301,L]
うーん、うまくいかない。。
起こったこと
以下のことが起こりました。
- http://sample.netに アクセスすると、 https://sample.netにリダイレクトされる ← OK
-
https://www,sample.net にアクセスすると 「この接続ではプライバシーが保護されません」画面になる ←??
- それでも閲覧を進めると、同じVPS上でメインで公開されているサイトAの画面が表示される(URLは https://sample.net のまま) ← ???
やったこと
.htaccessの記述順が影響しているのではと思い、httpsとwww削除の記述を入れ替えて見ましたが、変わりありませんでした。
.confファイルの記述が間違っているのかと思い、同じVPS上で正しく表示されている.confファイルと見比べて見ましたが、特に変わったところは見つかりませんでした。。。
ひょっとして、www付きのURLが紐づいてないんじゃね?
あーでもない、こーでもないと2~3時間がすぎました。。
https://sample.net はOKで、https://www.sample.net だとダメ。
www付きは同じVPS上の違うドメインの画面が表示されてしまう。
もしかして、www付きのドメインが紐づいてない??
.confファイルに ServerAlias を追加
ServerAlias
は ServerName
以外のホスト名でもアクセスを受け付けたい場合に記述します。
なくても動いていたので、そのままにしてましたが、もしやこれが原因なのでは?と思い、以下のように修正しました。
<VirtualHost *:80>
ServerName sample1.net
ServerAlias www.sample1.net ← 追加
DocumentRoot /var/www/sample1.net
</VirtualHost>
.htaccessは特にいじらず、再度 https://www.sample.net にアクセスすると・・・。
できた!!!
無事、wwwなしURLにリダイレクトできました。
知ってる人からしたら、当たり前のことかもしれませんが、これだけのために泣きを見てしまったので、備忘録と自分への戒めとして残します。
もし同じことでなハマってる人の助けになれば幸いです・・・。