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

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

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

htaccessの記述について質問です。 ドメインhoge.netにアクセスがあった場合に、 ブラウザの言語コード(英語と日本語)を取得して、 英語の場合、 en.hoge.net 日本語の場合、 ja.hoge.net それぞれサブドメインにリダイレクトさせたいと思っています。 下記のような記述だと、ループになりました。 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:Accept-Language} ^en [NC] RewriteRule ^(.*) http://en.hoge.net/$1 [R=301,L] RewriteCond %{HTTP:Accept-Language} ^ja [NC] RewriteRule ^(.*) http://ja.hoge.net/$1 [R=301,L] </IfModule> どのように記述すれば、 ループにならないのでしょうか。 お詳しい方、ご教授お願いします。

  • HTML
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5081/13278)
回答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% (5081/13278)
回答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% (5081/13278)
回答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

  • httpd.conf サブドメインのリダイレクト

    RewriteCond %{HTTP_HOST} ^(www.example\.com)(:80)? RewriteRule ^(.*) http://example.com$1 [R=301,L] httpd.confで上記のようにサブドメイン「www」をサブドメインなしにリダイレクトをしています。 これを他のサブドメイン(testやhoge)もサブドメインなしにリダイレクトするにはどうすればよいでしょうか? 正規表現での記述?がチンプンカンプンです。 何故か検索サイトに変なサブドメインが拾われて困ってます。 よろしくお願いします。

  • httpからhttpsへのリダイレクト方法

    すいません、よくわかりませんので教えて下さい。.htaccessに記述してhttpにアクセス来たものをhttpsへリダイレクトしたいです。 今の状況は下記です。 AddHandler application/x-httpd-php53 .php RewriteEngine On # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(sanetsu.com) RewriteCond %{REQUEST_URI} !^/(sanetsu.com)/ RewriteRule ^(.*)$ http://www.sanetsu.com/$1 [L] # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(www.burikama.com) RewriteCond %{REQUEST_URI} !^/(www.burikama.com)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L] # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(burikama.com) RewriteCond %{REQUEST_URI} !^/(burikama.com)/ RewriteRule ^(.*)$ http://www.burikama.com/$1 [L] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress すいません、上記の記述をどのように変更したらhttpsへリダイレクトさせることができますでしょうか?前任のweb担当の方と連絡が付かないので教えていただけたらありがたいです。 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • .htaccessでリダイレクトしたいです@さくら

    .htaccessでwwwなしのサイトにリダイレクトをかけたいのですが、うまくいきません。 色んな方法がサイトにありそれを試しているのですが、 一瞬テストでうまくいったと思ったのですが、それ以降うまくいかなくなってしまいました。 使用しているプロバイダはさくらインターネットです。 今までに試したコマンドは下記です。 --------------------------- <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.hoge\.com)(:80)? RewriteRule ^(.*) http://hoge.com/$1 [R=301,L] </IfModule> --------------------------- RewriteEngine on RewriteCond %{HTTP_HOST} www¥.hoge¥.com RewriteRule .* http://hoge.com%{REQUEST_URI} [R=301,L] --------------------------- .htaccess を設置しているディレクトリは /home/hoge/www になります。 ぜひ教えていただけないでしょうか。よろしくお願いいたします。 また、.htaccessは変更してどのくらいで反映されるのか、補足的に教えていただけると助かります。 以上、よろしくお願いいたします。

  • wwwありかつhttpsへリダイレクトさせたい

    .htaccessに以下の記述をしていますが、 ブラウザでURLに”xxxx.jp”と"http://xxxx.jp"と入力してアクセスすると、 https://xxxx.jpにリダイレクトされてしまます。 ドメインxxxx.jpを.htaccessに記載せずにhttps://www.xxxx.jpにリダイレクトさせる記述をご存知でしょうか? wwwありの場合"www.xxxx.jp"、"http://www.xxxx.jp"は意図したとおり”https://www.xxxx.jp"に転送されています。 --- RewriteEngine On RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] ---

    • 締切済み
    • CGI
  • SSLのリダイレクトについて

    sslのリダイレクトの作業を急いでやらないといけないのですが、sslに関しては全くの初心者なので調べながらいろいろやってみましたがどうしてもうまくいかず困っています。。 Wordpressでサイトを作成していてドメイン直下の.htaccessにリダイレクトの記述をしています。 サーバーはGMOのiCLUSTAで、sslはジオトラストです。 http://○○○.jp/ にアクセスした場合に、 https://ssl.○○○.jp/ へリダイレクトされるようにしたいです。 .htaccessの記述内容です # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress RewriteEngine on RewriteCond %{HTTPS} on RewriteRule ^(.*)$ https://ssl.○○○.jp/$1 [R=301,L] この記述をしていますが、リダイレクトされたりされなかったりの不安定な状態です。 されないことの方が多いのでどの条件で動いているのかがわかりません。 RewriteCond %{HTTPS} on を、 RewriteCond %{HTTPS} off にするとリダイレクトされますが、処理がループされていますという表示が出てしまいます。 どのような記述をすればうまくいくのでしょうか?

  • 「www.あり」へリダイレクト

    さくらサーバーにドメインを入れて、 そのドメインを「www.あり」で運営したいです。 その際、FTPでそのドメインの.htaccessに RewriteEngine on RewriteCond %{HTTP_HOST} ^(〇〇\.com)$ [NC] RewriteRule (.*) https://www.〇〇.com%{REQUEST_URI} [R=301,L] を記述しました。 そしたら、ログイン画面になり、 ユーザー名とパスを入れても、ログインできなくなりました。 ダッシュボードに切り替わりそうになるのですが、 そのままログイン画面に戻ります。 エラーメッセージが出るとかでなく、弾かれているような感じです。 ドメインを入れる手順は、 1、「www.なし」でドメイン登録 2、SSL化をする 3、.htaccessに記述 どうしても、「www.あり」でサイト運営をしたいです。 ですが、リダイレクトをしようとすると、ログインできなくなります。 この症状を直すには、どのような対処をしたらいいでしょうか? よろしくお願いいたします。

  • スマフォの振り分け

    .htaccess で以下のように振り分けたのですが、i pod touch で見ると アドレス欄には http://ドメイン/smart/ を読み込むのですが、 ページが開けないになります。どうしてでしょうか? <IfModule mod_rewrite.c> RewriteEngine On # iPod RewriteCond %{HTTP_USER_AGENT} iPod RewriteRule ^ http://ドメイン/smart/ [R] # iPhone RewriteCond %{HTTP_USER_AGENT} iPhone RewriteRule ^ http://ドメイン/smart/ [R] # Android RewriteCond %{HTTP_USER_AGENT} Android RewriteRule ^ http://ドメイン/smart/ [R] # WILLCOM RewriteCond %{HTTP_USER_AGENT} PDA RewriteRule ^ http://ドメイン/smart/ [R] </IfModule>

    • ベストアンサー
    • HTML
  • htaccess リダイレクトの記述方法

    「wwwなし http://www.abc.net/」から 「wwwありに統一 sslありのhttps://www.abc.net/」にリダイレクトしたいのですが、以下の記述で合っていますでしょうか。よろしくお願いします。 Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^abc.net RewriteRule ^(.*)$ http://www.abc.net/$1 [R=301,L] RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    • ベストアンサー
    • HTML
  • HTTPSへの強制リダイレクトについて

    質問です。さくらレンタルサーバで.htaccessで RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] or RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L] にしてもリダイレクトループが起きてしまい、強制的にhttpsにする事が出来ません。 例としてドメインを abc.jp として http://abc.jp/ (wwwはなし)で接続した時に httpsに移すという物ですが、さくらレンタルサーバでは、なぜかループしてしまいます。 どうすれば強制化出来るでしょうか。また.htaccess以外にも方法がありましたら お教え下さい。

  • .htaccess の書き方

    以下の .htaccess では、http://hoge.jp への携帯からのアクセスを http://hoge.jp/mobile ディレクトリへ転送させていますが、これを、 http://m.hoge.jp へ転送するには、どう記述を変えれば良いのでしょうか? ちなみに、使用予定のレンタルサーバでは、サブドメインつきのリクエストで 所定のディレクトリへアクセスさせるには、自分で .htaccess を書く必要が あるとのことです。(設定画面で設定できません) PC・携帯からのhttp://hoge.jp へのアクセスを、それぞれ PC: http://www.hoge.jp (/www/) 携帯: http://m.hoge.jp (/m/) という具合に振分転送させたいのですが・・・。 -------------------------------------- #携帯振り分け Options +FollowSymLinks RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} !^/mobile RewriteCond %{HTTP_USER_AGENT} DoCoMo [NC,OR] RewriteCond %{HTTP_USER_AGENT} (J-PHONE|Vodafone|Softbank|MOT-) [NC,OR] RewriteCond %{HTTP_USER_AGENT} (KDDI|UP\.Browser) [NC,OR] RewriteCond %{HTTP_USER_AGENT} (PDXGW|DDIPOKET|WILLCOM) [NC,OR] RewriteCond %{HTTP_USER_AGENT} ASTEL [NC,OR] RewriteCond %{HTTP_USER_AGENT} L-mode [NC] RewriteRule ^(.*)$ /mobile/$1 [R,L] #「www」ありに統一 RewriteCond %{HTTP_HOST} ^(hoge\.jp)(:80)? [NC] RewriteRule ^(.*)$ http://www.hoge.jp/$1 [R=301,L]

専門家に質問してみよう