1

我正在阅读与该主题相关的所有问题,但找不到任何东西。

首先,我有这个域:www.example.com

我的目的是根据浏览器的语言重定向用户:

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

我遵循了这条规则,但这里不是源网址:

<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

在这段代码中,在哪里建立目标网站?

这里:

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

和这里:

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

不知道这是一个错字还是这是您的 htaccess 文件中的内容,但这会产生 500 个内部服务器错误,因为您提供了RewriteRule4 个参数,而它只需要 2 个或 3 个参数。

另一个问题是您的%{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标头是一个复杂的限定符字符串。它不像enor那样简单es。西班牙网页浏览器可以同时包含 anen和 , es因为两者都是受支持的语言。根据此标头确定要重定向到的确切语言实际上不在 mod_rewrite 和 htaccess 的范围内。

于 2012-07-23T20:03:32.990 回答
0

如果您想检查域和浏览器语言,您可以这样做:

# Check domain (1), browser language (2) and redirect to subdirectory (3)
RewriteCond %{HTTP_HOST} .*example.com [NC]
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ http://%{HTTP_HOST}/en/ [L,R=301]

# ... copy block above for other languages ...

# Fallback for any other language to spanish
RewriteCond %{HTTP_HOST} .*example.com [NC]
RewriteRule ^$ http://%{HTTP_HOST}/es/ [L,R=301]
于 2016-05-30T09:13:59.580 回答