.htaccess 基于集合cookie的重定向

.htaccess 基于集合cookie的重定向,.htaccess,mod-rewrite,cookies,url-redirection,.htaccess,Mod Rewrite,Cookies,Url Redirection,我有一个双语网站。 用户应根据其浏览器语言自动重定向到相应的子目录/en/和/de/。我是通过.htaccess实现的 如果用户仍然想要切换语言,那么网站上的语言切换程序就是语言切换程序。切换语言时,会有一个cookie集,其中包含值en或de 现在我想让我的htaccess检查是否有cookie集,如果有:检查值并重定向到适当的文件夹。如果不是:请检查浏览器语言并重定向到相应的文件夹 这是我到目前为止所做的,但它给了我一个错误:太多的重定向 RewriteEngine on RewriteC

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

如果用户仍然想要切换语言,那么网站上的语言切换程序就是语言切换程序。切换语言时,会有一个cookie集,其中包含值
en
de

现在我想让我的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);

当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]

啊,谢谢你的提示!我现在得到的是类似于
http://example.com/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en
…我用生成cookie的代码更新了我的问题。也许这会有帮助。