LoginSignup
1
0

More than 5 years have passed since last update.

.htaccess で URLの正規化(www削除)ができなくて泣きを見た話

Posted at

いきなり結論から

VPSでバーチャルホストを設定するときは、*.confファイルに ServerAlias もちゃんと書こうね!

*.conf
<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]

うーん、うまくいかない。。

起こったこと

以下のことが起こりました。

やったこと

.htaccessの記述順が影響しているのではと思い、httpsとwww削除の記述を入れ替えて見ましたが、変わりありませんでした。

.confファイルの記述が間違っているのかと思い、同じVPS上で正しく表示されている.confファイルと見比べて見ましたが、特に変わったところは見つかりませんでした。。。

ひょっとして、www付きのURLが紐づいてないんじゃね?

あーでもない、こーでもないと2~3時間がすぎました。。

https://sample.net はOKで、https://www.sample.net だとダメ。
www付きは同じVPS上の違うドメインの画面が表示されてしまう。
もしかして、www付きのドメインが紐づいてない??

.confファイルに ServerAlias を追加

ServerAliasServerName 以外のホスト名でもアクセスを受け付けたい場合に記述します。
なくても動いていたので、そのままにしてましたが、もしやこれが原因なのでは?と思い、以下のように修正しました。

*.conf
<VirtualHost *:80>
    ServerName sample1.net
    ServerAlias www.sample1.net ← 追加
    DocumentRoot /var/www/sample1.net
</VirtualHost>

.htaccessは特にいじらず、再度 https://www.sample.net にアクセスすると・・・。
できた!!!

無事、wwwなしURLにリダイレクトできました。

知ってる人からしたら、当たり前のことかもしれませんが、これだけのために泣きを見てしまったので、備忘録と自分への戒めとして残します。

もし同じことでなハマってる人の助けになれば幸いです・・・。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0