前書き
今回、Apacheの設定を変更するが、.htaccessは使わず、confファイルを変更する。 .htaccessは管理者以外も変更できてしまうので、基本的には非推奨。 confファイルも、なるべくhttpd.confの直接書き込まないようにする。
URL正規化
各バーチャルホスト設定の中に下記を追加する。
wwwなしからありにリダイレクトする場合
ServerAlias www.example.testtotest.com RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com RewriteRule ^(.*)$ http://www.example.com [R=301,L]
wwwありからなしにリダイレクトする場合
ServerAlias www.example.testtotest.com RewriteEngine on RewriteCond %{HTTP_HOST} ^www.example.com RewriteRule ^(.*)$ http://example.com [R=301,L]
筆者は443のバーチャルホスト設定では、RewriteRuleをhttpsで記述したが、httpのままで問題ない模様。
常時SSL化
80のバーチャルホスト内に以下を追加する。
RewriteEngine on RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=308,L]
常時SSL化とURL正規化を両方行う。
今回、以下の4つのURLを、https://www.example.comにリダイレクトする想定で行う。
- https://www.example.com
- https://example.com
- http://www.example.com
- http://example.com
そうすると、以下のようなバーチャルホスト設定になる。
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com RewriteEngine on RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=308,L] ~~~~~~~~~~~~~~~~ #以下略 </VirtualHost> <VirtualHost _default_:443> ServerName example.com ServerAlias www.example.com RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com RewriteRule ^(.*)$ https://www.example.com [R=308,L] ~~~~~~~~~~~~~~~~ #以下略 </VirtualHost>