1

このトピックに関連するすべての質問を読んでいましたが、何も見つかりませんでした。

まず、私はこのドメインを持っています: www.example.com

私の目的は、ブラウザの言語に応じてユーザーをリダイレクトすることです。

例: www.example.com => www.example.com/es www.example.com => www.example.com/en

私はこのルールに従いましたが、ここにソース URL はありません:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:Accept-Language} ^es [NC]
RewriteCond %{HTTP_REFERER} !^*\.domain\.com.ar/ [NC] 
RewriteRule ^$ http://www.example.com/es / [L,R] 
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteCond %{HTTP_REFERER} !^*\.domain\.be/ [NC] 
RewriteRule ^$ http://www.example.com/en / [L,R]
</IfModule>  
4

2 に答える 2

1

このコードでは、宛先 Web サイトを確立する場所はどこですか?

ここ:

RewriteRule ^$ http://www.example.com/es / [L,R] 

そしてここ:

RewriteRule ^$ http://www.example.com/en / [L,R]

それがタイプミスなのか、それとも htaccess ファイルにあるものなのかはわかりませんがRewriteRule、2 つまたは 3 つのみが必要なときに 4 つのパラメーターを指定しているため、500 内部サーバー エラーが発生します。

もう1つの問題は、%{HTTP_REFERER}正規表現にあります。Apache はおそらくここで吐くつもりです: ^*\.domain\.com.ar/、あなたはおそらく:^[^/]*\.domain\.com.ar/または何かを意味しました。したがって、おそらくルールは次のようになります。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:Accept-Language} ^es [NC]
RewriteCond %{HTTP_REFERER} !^[^/]*\.domain\.com.ar/ [NC] 
RewriteRule ^$ http://www.example.com/es/ [L,R] 
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteCond %{HTTP_REFERER} !^[^/]*\.domain\.be/ [NC] 
RewriteRule ^$ http://www.example.com/en/ [L,R]
</IfModule>  

もちろん、domain.com.aranddomain.beとのインスタンスをwww.example.com正しいホスト名に置き換えます。

また、Accept-Languageヘッダーは修飾子の複雑な文字列です。enまたはほど単純ではありませんes。スペイン語の Web ブラウザーには、 と の両方が含まれている可能性がありますenesこれは、両方ともサポートされている言語だからです。このヘッダーに基づいてリダイレクトする正確な言語を決定することは、実際には mod_rewrite と htaccess の範囲内ではありません。

于 2012-07-23T20:03:32.990 に答える