我有一个多语言网站,它使用cookie来存储语言信息。我需要写一个.htaccess脚本
a)检查是否设置了语言cookie,以及URI是否包含它。如果没有,则将其添加到URI。
现在我有这个:
RewriteCond %{HTTP_COOKIE} language=([a-z]{2}) [NC]
RewriteCond %{REQUEST_URI} !^%1/(.*) [NC]
RewriteRule ^(.*)$ /%1/%2 [L,NC,R=302]
虽然这给了我正确的URI(“domain.com/en/”),但它给出了一个错误,指出页面没有正确重定向。
b)检查是否在URI中设置了语言参数,以及是否设置了适当的cookie。
到目前为止,我得到的代码是:
RewriteRule ^([a-z]{2})(.*)/$ - [co=language:$1:.domain.com:7200:/]
但是这只会在你离开页面后设置cookie。所以我必须在地址中添加'/ fr /',然后刷新两次
我已经尝试过查看Google和Stack Overflow,但我似乎无法使其正常工作!
答案 0 :(得分:0)
请求uri始终以/
开头。
另外%1仅适用于最后一个RewriteCond,所以我认为你的代码应该是
RewriteCond %{HTTP_COOKIE} language=([a-z]{2}) [NC]
RewriteCond %{REQUEST_URI} !^/(%1)/(.*) [NC]
RewriteRule ^(.*)$ /%1/%2 [L,NC,R=302]
离开页面后设置的cookie似乎很奇怪。 cookie在响应中设置,因此它仅在下一个请求时出现在请求标头中。不知道这是不是你的意思,但这是正常行为。尝试检查javascipt中的document.cookie
编辑:以上代码无效。请参阅下面的更新版本。我在上面添加了你的cookie设置规则并添加了L
标志,因此如果它匹配则不会执行它下面的规则,因此防止了无限循环的重定向,这就是firefox意味着“没有正确重定向”。
RewriteRule ^([a-z]{2})(/.*)?$ - [co=language:$1:.domain.com:7200:/]
RewriteRule ^([a-z]{2})(/.*)?$ - [L]
RewriteCond %{HTTP_COOKIE} language=([a-z]{2}) [NC]
RewriteRule ^(.*)$ /%1/$1 [L,NC,R=302]