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
2 thoughts on “.htaccessでURLのwww有り無しを統一する方法”
通常アクセスのポート80の行は必要ですか?
常時SSL化しているサイトであれば必要ないと思います。