tomocha.net 以外にも、複数のドメインを所有しており、基本的にwww付きでアクセスしてきた場合、www無しでアクセスをさせたいとおもい、試行錯誤してみたところ、上手く動作しない。
問題はApacheのRwriteが日本語に対応していないと言うこと、ブラウザの挙動がまちまちであるようだ…。
今回、i-NaviがインストールできなかったのでFireFox3.0.7での動作確認になるのだが、次のような結果になった。
★ 日本語JPドメイン:
http://XN--H9JN2FF.jp/ にアクセスするとURLバーには、http://ともちゃ.jp/ と表示される。
次のようにApacheのRewriteの設定をおこない動作確認してみた。
RewriteCond %{HTTP_HOST} ^.*\.XN--H9JN2FF\.jp$ [NC] RewriteRule ^(/.*) http://XN--H9JN2FF.jp$1 [R=301,QSA]
http://www.XN--H9JN2FF.jp/ にアクセスしても、http://XN--H9JN2FF.jp/ へLocationで飛ばされた後に、FireFoxは日本語JPだと解釈をおこない、http://ともちゃ.jp/ と正しいURIで表示されることが確認出来た。
★ gTLD 日本語ドメイン:
gTLDな日本語ドメインでおこなったところ、http://XN--H9JN2FF.net/ でアクセスしても、http://ともちゃ.net/ とは、表示されず、http://XN--H9JN2FF.jp/ のままになり、日本語ドメインという判別が出来ていない。ただし、http://ともちゃ.net/ でアクセスをおこなうと、punycodeは解釈出来るため、アクセスが可能であるが、http://xn--h9jn2ff.net/ となってしまう。
次に、ApacheのRewriteの設定をおこない動作確認をしてみた。
RewriteCond %{HTTP_HOST} ^.*\.XN--H9JN2FF\.net$ [NC] RewriteRule ^(/.*) http://XN--H9JN2FF.net$1 [R=302,QSA]
http://www.ともちゃ.net/ にアクセスしてみたところ、http://www.XN--H9JN2FF.net/ と扱われ、そのごRewriteされ、http://XN--H9JN2FF.net/ が表示され、日本語ドメインが表示されることはなかった。
仮にRewriteRuleに次のように書いた場合、
RewriteRule ^(/.*) http://ともちゃ.net$1 [R=301,QSA]次のようになった。
telnet で確認をおこなっているが、EUCで帰ってきた。(Apacheの設定ファイルはEUC)
Location: http://ともちゃ.net/
FireFoxが解釈するときは、「www.%a4%c8%a4%e2%a4%c1%a4%e3.net」となってしまい、URLエンコードをおこなってしまうという状況になり、日本語ドメインでのアクセスは不可能だった。ちなみにUTFで保存しても同じ状況だが、どういった方法を取れば、ブラウザに適切に日本語ドメインをRewriteで渡すことが出来るのだろうか。
★ まとめ:
今回やりたかったこととしては、http://www.ともちゃ.net とアクセスをしてきたときに、http://ともちゃ.net と'www'無しを実現したかっただけなのである。
今回はFireFoxでおこなったがほかのブラウザではどうなるのだろう。
最初からpunycodeでアクセスしてきたとき、そのままドメインとして扱われ、日本語ドメインでアクセスした場合、内部的にpunycodeへ変換、URLバーは、日本語のままという状況であった場合、適切に日本語ドメインのURLをブラウザに渡してやることが出来なければ、日本語ドメインでアクセスしたはずなのにRewriteされ、いつの間にかpunycodeなURLになっているよ、、、といった自体が発生すると予想される。
また、今回は.net 等については、FireFoxは対応していないようだが、日本語ドメインを適切に扱える場合、punycodeでアクセスしてしまった後そのまま、日本語に置きかえてくれれば良いのだが、このようなブラウザ内でのURLバーに対するURL書き換え機能が付いていない場合、punycodeでアクセスしてしまうと、それを単一のドメインとして扱ってしまい、そのままアクセスし続ける可能性がある。その為、Rewriteで、正しく日本語ドメインをブラウザに渡すことが出来る必要があると考えられる。
これについて、適切な方法は無いだろうか、、、。調べてみたところ情報を見つけることが出来なかった。
現在未確認だが、 <meta http-equiv="Refresh" content="0;URL=http://日本語ドメイン.net/"> を使えば解決できるかもしれない。でも、これを実現する際には、必要な数だけvhostをつくらないといけないので、面倒であり、多数のドメインを扱う場合非現実的となりうる。一括で、serveraliasを設定若しくは、_default_ でアクセスさせ、RewriteRuleで一つのVirtualHostでまとめてURL変換が出来たら、非常に楽になるであろう、、、とおもうのだが。。