我正在使用以下规则将域名重定向到基于浏览器语言的网站的EN版本:
RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /en [L,R=302]
这适用于www.domain.com,但无法从now-www重定向到www。 例如,无法将http://domain.com重定向到http://www.domain.com/en,这就是我想要实现的目标。
我应该在规则中添加什么? 谢谢!
答案 0 :(得分:5)
要将非www重定向到www,请在问题中添加此规则集,如下所示:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
#This is the rule set in the question:
RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /en [L,R=302]
由于您说实际规则集工作正常,但www
问题除外,我没有对其进行修改或测试。
最高规则规则的作用是将www插入所有网址。就这样。它与您问题中的规则无关,但如果您想将转换限制为仅限EN语言,请移动此行:
RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC]
在最后一个规则集中,到第一个规则集,如下所示:
....
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC]
....
方法强>
要重定向所有与之前语言规则不匹配的请求,请在所有语言规则之后将以下行放在底部。
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /en [L,R=302]
默认情况下,它会将所有传入的请求重定向到英语部分。
因此,您的.htaccess文件应如下所示:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^sv.*$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /sv [L,R=302]
RewriteCond %{HTTP:Accept-Language} ^nb.*$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /nb [L,R=302]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /en [L,R=302]
我建议您将所有R=302
替换为R=301
。这对SEO来说更好。