• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:言語コードごとサブドメインのリダイレクト)

言語コードごとサブドメインのリダイレクト

このQ&Aのポイント
  • 言語コードごとに異なるサブドメインにリダイレクトする方法について質問です。
  • 例えば、ドメインhoge.netにアクセスがあった場合、ブラウザの言語コードを取得し、英語の場合はen.hoge.net、日本語の場合はja.hoge.netにリダイレクトさせたいと思っています。
  • 現在の記述だとループになってしまい、正しくリダイレクトされません。どのように記述すればループを回避できるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.2

/var/www/html/.htaccess は html ディレクトリ以下の全てのディレクトリに適用されてしまうため、/var/www/html/lang/en のアクセスに対しても、/var/www/html/lang/ja のアクセスに対しても有効な設定になってしまい、ループ現象が発生していると思われます。 confファイルの修正が出来るのであれば NameVirtualHost *:80 <VirtualHost *:80> ServerName en.hoge.net DocumentRoot /var/www/html/lang/en RewriteEngine On RewriteCond %{HTTP:Accept-Language} ^ja [NC] RewriteRule ^(.*) http://ja.hoge.net/$1 [R=301,L] </VirtualHost> <VirtualHost *:80> ServerName ja.hoge.net DocumentRoot /var/www/html/lang/ja RewriteEngine On RewriteCond %{HTTP:Accept-Language} ^ja [NC] RewriteRule ^(.*) http://ja.hoge.net/$1 [R=301,L] </VirtualHost> とするのがいいと思います。 .htaccess でやる必要があるのなら RewriteEngine On RewriteCond %{HTTP_HOST} !^en.hoge.net$ RewriteCond %{HTTP:Accept-Language} ^en [NC] RewriteRule ^(.*) http://en.hoge.net/$1 [R=301,L] RewriteCond %{HTTP_HOST} !^ja.hoge.net$ RewriteCond %{HTTP:Accept-Language} ^ja [NC] RewriteRule ^(.*) http://ja.hoge.net/$1 [R=301,L] とするといいかと思います。

hachimitsu4649
質問者

お礼

補足欄に記入できないので、 お礼欄で失礼します。 confファイルを以下にして、 NameVirtualHost *:80 <VirtualHost *:80> ServerName hoge.net DocumentRoot /var/www/html </VirtualHost> <VirtualHost *:80> ServerName ja.hoge.net DocumentRoot /var/www/html/lang/ja </VirtualHost> <VirtualHost *:80> ServerName en.hoge.net DocumentRoot /var/www/html/lang/en </VirtualHost> .htaccessファイルを <IfModule mod_rewrite.c> RewriteEngine On #日本 RewriteCond %{HTTP_HOST} !^ja.hoge.net$ RewriteCond %{HTTP:Accept-Language} ^ja [NC] RewriteRule ^(.*) http://ja.hoge.net/$1 [R=301,L] #英語 RewriteCond %{HTTP_HOST} !^en.hoge.net$ RewriteCond %{HTTP:Accept-Language} ^en [NC] RewriteRule ^(.*) http://en.hoge.net/$1 [R=301,L] </IfModule> として希望の動作になったのですが、 ブラウザの言語設定を日本語のまま、 http://en.hoge.net と打ち込むと、 http://ja.hoge.net/lang/en/ にジャンプし、 NotFoundになってしまいます。 ブラウザの言語設定を日本語のまま、 http://en.hoge.net と打ち込んだ場合に、 http://en.hoge.net が表示させることはできないのでしょうか。 たびたび申し訳ありません。

hachimitsu4649
質問者

補足

ありがとうございます! confへの記述では、 <VirtualHost *:80> ServerName ja.hoge.net DocumentRoot /var/www/html/lang/ja RewriteEngine On RewriteCond %{HTTP:Accept-Language} ^ja [NC] RewriteRule ^(.*) http://ja.hoge.net/$1 [R=301,L] </VirtualHost> でも、 <VirtualHost *:80> ServerName ja.hoge.net DocumentRoot /var/www/html/lang/ja RewriteEngine On RewriteCond %{HTTP_HOST} !^ja.hoge.net$ RewriteCond %{HTTP:Accept-Language} ^ja [NC] RewriteRule ^(.*) http://ja.hoge.net/$1 [R=301,L] </VirtualHost> でも、うまく動きませんでした。 .htaccess では、 ご指示の記述でうまく動きました。 ありがとうございます!

その他の回答 (2)

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.3

> ブラウザの言語設定を日本語のまま、 > http://en.hoge.net と打ち込んだ場合に、 > http://en.hoge.net が表示させることはできないのでしょうか。 その場合は、hoge.net のバーチャルホスト設定を <VirtualHost *:80> ServerName hoge.net DocumentRoot /var/www/html/lang/none </VirtualHost> として、.htaccessファイルを /var/www/html/lang/none の中に移動させましょう。 先の回答でも書きました通り /var/www/html/.htaccess は下位のディレクトリに対しても影響を与えますので /var/www/html/lang/ja と /var/www/html/lang/en にも適用されます。 http://hoge.net へのアクセスにだけに適用させたいのであればディレクトリを別けるしかありません。

hachimitsu4649
質問者

お礼

ありがとうございます。 やってみます!

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

これでループになると言う事は、 hoge.net en.hoge.net ja.hoge.net の3つのサイトのドキュメントルートが同じディレクトリになっているか、.htaccessファイルの置き場所に問題があると思われますが、どのような設定をされていますか。

hachimitsu4649
質問者

補足

.htaccessは、デフォルトルートディレクトリ /var/www/html/.htaccess だけに置いてあります。 http.confでは、以下の設定をしました。 NameVirtualHost *:80 <VirtualHost *:80> ServerName en.hoge.net DocumentRoot /var/www/html/lang/en </VirtualHost> <VirtualHost *:80> ServerName ja.hoge.net DocumentRoot /var/www/html/lang/ja </VirtualHost> 英語コンテンツ en.hoge.net は、 /var/www/html/lang/en/index.html 日本語コンテンツ ja.hoge.net は、 /var/www/html/lang/ja/index.html にを読むようにしたいと思っています。

関連するQ&A