ハイフン入りドメイン名でRewriteCondを使用する
.htaccess、RewriteRuleを使用するURLの書き換えやリダイレクトで、RewriteCondを使用する時に、一般的には以下のようにする。
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^/(.*)$ http://www.example.com/$1
が、ハイフン入りのURLの場合、このRewriteCondが機能しない。
調べてみたら、この話題は結構多かったが、解決策が見つからなかったので、考えてみた。
RewriteEngine on
SetEnv NO_WWW=no
SetEnvIf Host ^wi-wi.jp$ NO_WWW=yes
RewriteCond %{ENV:NO_WWW} yes
RewriteRule (.*) http://www.wi-wi.jp/$1 [R=301,L]
SetEnvを使用してNO_WWW環境変数に登録し、RewriteCondではその環境変数を調べるという方法。
これでうまくいった。
ちなみに
RewriteCond %{ENV:HTTP_HOST} ^wi-wi.jp$
ではダメだった。
たぶん、RewriteCondにハイフンが入る事自体がダメらしい。
RewriteRuleのところで^/(.*)$
としていないのは、なぜかこの書き方にするとリダイレクトできなかったから。