Jos*_* A. 5 apache mod-rewrite
我正在使用以下规则将域重定向到基于浏览器语言的网站的EN版本:
RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /en [L,R=302]
Run Code Online (Sandbox Code Playgroud)
这适用于www.domain.com,但无法从now-www重定向到www.例如,无法将http://domain.com重定向到http://www.domain.com/en,这就是我想要实现的目标.
我该怎么加入规则?谢谢!
要将非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]
Run Code Online (Sandbox Code Playgroud)
既然你说实际的规则集工作正常,除了www问题,我没有修改它或测试它.
最高规则规则的作用是将www插入所有URL.就这样.它独立于您的问题中的规则,但如果您只想将转换限制为EN语言,请移动此行:
RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC]
在最后一个规则集中,到第一个规则集,如下所示:
....
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC]
....
Run Code Online (Sandbox Code Playgroud)
选项
要重定向所有与先前语言规则不匹配的请求,请在所有语言规则之后将以下行放在底部.
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /en [L,R=302]
Run Code Online (Sandbox Code Playgroud)
默认情况下,它会将所有传入请求重定向到英语部分.
因此,您的.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]
Run Code Online (Sandbox Code Playgroud)
我建议你更换所有R=302有R=301.这对SEO来说更好.
| 归档时间: |
|
| 查看次数: |
2363 次 |
| 最近记录: |