使用htaccess& amp;基于cookie添加语言到URI根据uri设置cookie

时间:2011-12-21 15:39:11

标签: .htaccess cookies

我有一个多语言网站,它使用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,但我似乎无法使其正常工作!

1 个答案:

答案 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]