2012-07-23 49 views
1

我正在阅读与此主题相关的所有问题,但找不到任何内容。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> 
+0

什么是不工作? – 2012-07-23 15:23:03

+0

在这段代码中,哪里设置了目标网站?我的意思是......如果用户想要访问此网站:www.example.com,我需要根据浏览器的语言将他重定向到www.example.com/es或www.example.com/en。 – m4g4bu 2012-07-23 19:53:49

回答

0

在这段代码中,哪里设置了目标网站?

这里:

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

这里:

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

不知道如果这是一个错字或如果这是你在你的htaccess的文件,但是这将产生500内部服务器错误,因为你给RewriteRule 4参数,当它只想要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.ardomain.bewww.example.com实例。

另请注意:Accept-Language标头是一个复杂的限定符字符串。它不像enes那么简单。西班牙网页浏览器可能包含enes,只是因为它们都是支持的语言。根据这个头文件确定一个确切的语言重定向到的地方并不在mod_rewrite和htaccess的范围内。

+0

,但如果用户在浏览器中输入:www.example.com,我想将用户重定向到:www.example.com/es或www.example.com/en。上面提供的代码不起作用 – m4g4bu 2012-07-23 22:34:31

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] 
相关问题