2011-05-31 11 views
3

私は7か国語で提供されているサイトを持っています。言語mod_rewriteでリダイレクト

ユーザーがホームページにアクセスしている場合にのみ、ブラウザの言語に基づいてユーザーをリダイレクトできます。これは、有機的なトラフィックになるとユーザビリティが向上することを意味します。このリダイレクトはホームページにのみ適用する必要があります。サイトでは各言語固有のメーラーも送信され、ユーザーがリダイレクトされても機能しません。

また、各言語はサブドメインです。英語の場合はwww.site.com、ドイツ語の場合はde.site.comです。 メーラーのURLは、次のようになります。www.site.com/home/login?query=string

可能であれば、.htaccessファイルでこれを行いたいと思います。

誰でも洞察力を提供できますか?

ありがとうございました。

答えて

7

あなただけのホームページでしばらくリダイレ​​クトしたいので、あなたがこのように行うことができます(assumging www.xyz.comがあなたのホームページです)

RewriteCond %{HTTP:HOST} www.xyz.com // user visiting default 
RewriteCond %{HTTP:Accept-Language} ^de [NC] // browser language German 
RewriteRule ^$ de.xyz.com [L,R=301] // R=302 if you need temporary redirect 

http://tech-blog.borychowski.com/index.php/2009/03/htaccess/redirect-according-to-browser-language-mod-rewrite-and-http_accept_language/

+0

私は 'HTTPを指定する必要がありました私は望んでいない)しかし、そうでなければ、健全な答え! – adampetrie

1

これは上の精緻ですRizwan's answer、あまりにも多くの編集やコメント(私は試してみました)。

ユーザーがデフォルトドメイン(ここではwww.xyz.comde.xyz.comなどではない)のホームページにアクセスしたときにリダイレクトするとします。ここでは、(these instructions次)それを行うことができます方法は次のとおりです。

RewriteCond %{HTTP:HOST} www.xyz.com   // Visit to default domain. 
RewriteCond %{HTTP:Accept-Language} ^de [NC] // Browser language German. 
RewriteRule ^$ http://de.xyz.com/  [L,R=301] 

RewriteCond %{HTTP:HOST} www.xyz.com 
RewriteCond %{HTTP:Accept-Language} ^it [NC] 
RewriteRule ^$ http://it.xyz.com/  [L,R=301] 

# etc. for your other 5 languages 

ノート&説明

  • R=301通常のブラウザでキャッシュされる恒久的なリダイレクト、です。これにより、後でリダイレクトターゲットを変更するオプションが制限されるため、キャッシュされないR=302一時リダイレクトを使用することを検討することもできます。
  • Accept-Language:ヘッダーの最初の値を確認して優先言語を決定すると、ほとんどの場合は機能しますが、the standardには該当しません。それはde;q=0.5, en;q=0.9のような理論的に可能な値を誤って解釈します。これを完全に正しくするには、感想をご覧くださいherehere
  • RewriteRuleでは、^$は、空の文字列、つまり「ホームページ」と一致します。これは、Apacheが[.htaccess]が[source]にあるディレクトリに対応するファイルパスからディレクトリプレフィックスを削除するためです。 (相対的なリダイレクトを防ぐために// de.xyz.com`:(。/が起こらないと、パターンではなく^/$でなければならないであろうことを取り除く、VirtualHostのコンテキストで)
関連する問題