我正在阅读与此主题相关的所有问题,但我找不到任何问题。
首先,我有这个域: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 :(得分: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.ar
和domain.be
以及www.example.com
的实例。
另请注意:Accept-Language
标头是一系列复杂的限定符。它不像en
或es
那么简单。西班牙语网络浏览器可以包含en
和es
,因为它们都是受支持的语言。确定基于此标头重定向到的确切语言并不属于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]