要将非 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 插入所有 URL。就这样。它独立于您问题中的规则,但如果您只想将该转换限制为 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 目的。