htaccess +重定向用户,具体取决于浏览器语言

时间:2012-07-23 12:38:14

标签: .htaccess

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

首先,我有这个域: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>  

2 个答案:

答案 0 :(得分:0)

  

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

下面:

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

在这里:

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

不知道这是否是一个拼写错误,或者这是你的htaccess文件中的内容,但这会产生500个内部服务器错误,因为你只需要2个或3个RewriteRule 4个参数。

另一个问题是您的%{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.ardomain.be以及www.example.com的实例。

另请注意:Accept-Language标头是一系列复杂的限定符。它不像enes那么简单。西班牙语网络浏览器可以包含enes,因为它们都是受支持的语言。确定基于此标头重定向到的确切语言并不属于mod_rewrite和htaccess的范围。

答案 1 :(得分: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]