URLの正規化

最近対応することが多いのでメモ。www無し→www有りに301リダイレクトするパターン、逆にwww有り→www無しに301リダイレクトするパターンをメモしておきます。

www無し→www有りに301リダイレクト

RewriteCondで条件を指定します。{HTTP_HOST}でサーバーのホスト名のマッチング、{SERVER_PORT}で80番ポート(http)と443番(https)どちらにも対応するようにします。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^xxxxxx\.com
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ http://www.xxxxxx.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^xxxxxx\.com
RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*)$ https://www.xxxxxx.com/$1 [R=301,L]

www有り→www無しに301リダイレクト

先程の逆でRewriteCondで指定する正規表現の条件にwwwを追加します。あとはRewriteRuleでのリダイレクト先を変更するだけ。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.xxxxxx\.com
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ http://xxxxxx.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.xxxxxx\.com
RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*)$ https://xxxxxx.com/$1 [R=301,L]

できた!\(^o^)/
サーバーサイドはまだまだ知識が浅いな。

参考サイト

Apache HTTP Server Tutorial: .htaccess files
https://httpd.apache.org/docs/2.4/en/howto/htaccess.html