基于设置cookie重定向

时间:2015-10-07 09:16:08

标签: .htaccess mod-rewrite cookies url-redirection

我有一个双语网站。 用户应根据其浏览器语言自动重定向到相应的子目录/en//de/。我通过.htaccess实现了这一点。

如果用户仍想切换语言,则网站上是语言切换器。切换语言时,会有一个包含值ende的Cookie集。

现在我想让我的htaccess检查是否有cookie设置,如果是的话:检查值并重定向到相应的文件夹。如果不是:检查浏览器语言并重定向到相应的文件夹。

这是我到目前为止所得到的,但它给了我一个错误:重定向太多......

RewriteEngine on

RewriteCond %{HTTP_COOKIE} Test=en; [NC]
RewriteRule ^ http://example.com/en [L,R=301]

RewriteCond %{HTTP_COOKIE} Test=de; [NC]
RewriteRule ^ http://example.com/de [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ http://example.com/de [L,R=301]

RewriteRule ^$ http://example.com/en [L,R=301]

这是生成cookie的代码:

if (session_id() == '') {
  session_start();
}

$lang = basename ( $_SERVER['REQUEST_URI'] );

setcookie("Test", $lang);

1 个答案:

答案 0 :(得分:1)

当URL已被重定向一次时,您不会限制重定向。这导致无限重定向循环。

RewriteCond %{REQUEST_URI} !^/(?:en|de) [NC]
RewriteCond %{HTTP_COOKIE} test=(en|de) [NC]
RewriteRule ^(.*)$ http://example.com/%1/$1 [R=301,L]

RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ http://example.com/de [R=301,L]

RewriteRule ^$ http://example.com/en [R=301,L]