2017-11-17 19 views
1

ユーザーのブラウザ言語を検出し、ベースURLにパスセグメントを追加します。例えば、リダイレクトの一つは次のようになります。そこには/デセグメントがwww.domain.com後でないと、ホームページ(www.domain.com)を要求し、英語の場合は :.htaccess言語のリダイレクト:パスセグメントを検出して無限ループを避ける

RewriteEngine On  

RewriteCond %{REQUEST_URI} !^/de 
RewriteCond %{REQUEST_URI} ^/ 
RewriteCond %{HTTP:Accept-Language} !en [NC] 
RewriteCond %{HTTP:Accept-Language} de [NC] 
RewriteRule ^(.*)$ /de [R=302,L] 

私はこのようにそれを理解しますプリファード言語ではなく、ドイツ語がwww.domain.com/deにリダイレクトされています。 私の質問はなぜRewriteCond %{REQUEST_URI} !^/deRewriteCond %{REQUEST_URI} ^/はいつも真のですか?このリダイレクトを私の.htaccessに挿入する前に、私の設定であるhere(他の.htaccessの質問にあります)がテストされ、うまくいきました。あなたは私がそれを歓迎する別の解決策がある場合。ありがとうございました。

答えて

1

あなたのルールはこれにリファクタリングする必要があります:REQUEST_URIは常に/で始まるので

RewriteEngine On 

RewriteCond %{REQUEST_URI} !^/de [NC] 
RewriteCond %{HTTP:Accept-Language} !en [NC] 
RewriteCond %{HTTP:Accept-Language} de [NC] 
RewriteRule ^/?$ /de [R=302,L] 

RewriteCond %{REQUEST_URI} ^/は常にtrueになります。 RewriteCond %{REQUEST_URI} ^/$を使用すると、意図したとおりに動作します。私たちがRewriteRule ^/?$でもできることと同じことだから、私は私の答えから余分な条件を取り除いた。

+0

@enubhavaはい、ありがとうございます。このリダイレクトがwww.domain.comページのみで動作するように、私は 'RewriteCond%{REQUEST_URI}^/'を使用しました。なぜこの条件なしで意図した通りに動作するのですか? –

+0

@enubhavaご質問が不明な場合は申し訳ありませんが、あなたの条件がwww.domain.comのリクエスト(正確に何が必要なのか)についてのみ機能するのはなぜですか? –

+1

これはランディングページにのみ一致するこのパターン 'RewriteRule^/?$'のためです。 – anubhava

関連する問題