• 締切済み

.htaccessでURLのwwwの有無を制御する方法

URLをwww無しで統一したく、.htaccessでwwwを付けてアクセスした際に強制的にwww無しになるよう設定をしています。 .htaccessの内容は以下の通りです。 ------------------------------------------------------------ RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.hogehoge\.net)(:80)? RewriteRule ^(.*) ​http://hogehoge.net/$1​ [R=301,L] ------------------------------------------------------------ こちらの内容で問題無く理想の動きをしてくれているのですが、検索をして調べていると、少しの差ではありますが以下のように違う書き方をしている方もいるようで、動きも変わりません。 ------------------------------------------------------------ RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.hogehoge\.net$ RewriteRule ^(.*)$ ​http://hogehoge.net/$1​ [R=301,L] ------------------------------------------------------------ 他にも色々な書き方がありましたが、ここでは割愛しています。 厳密にはどのような書き方が正しいのでしょうか。 正しい書き方があるのであればご教示願います。 .htaccess関連の質問は色々なカテゴリに分散されており、今回“ハードウェア(サーバー)”や“Linux系OS”等と悩み、“その他(プログラミング)”のカテゴリへ質問をさせて頂きました。 より良いカテゴリがあるようでしたらご指摘願います。

みんなの回答

noname#98692
noname#98692
回答No.1

これは Apache の設定の問題というよりも、正規表現の問題です。 大抵の場合どちらでも望みの動作になりますが微妙に違います。 ^www\.hogehoge\.net$ は文頭すぐに www.hogehoge.net があり、それで終端している文字列に一致します。.net で終端してなければならないので、www.hogehoge.net:80 には一致しません。 ^(www\.hogehoge\.net)(:80)? はもう少し冗長にしたもので www.hogehoge.net に一致しますし www.hogehoge.net:80 にも一致します。 詳しく知りたくなったら、正規表現 について調べてみることをお勧めします。

関連するQ&A