Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess RewriteCond适用于IE,但不适用于Firefox或Chrome_.htaccess_Mod Rewrite_Http Accept Language - Fatal编程技术网

.htaccess RewriteCond适用于IE,但不适用于Firefox或Chrome

.htaccess RewriteCond适用于IE,但不适用于Firefox或Chrome,.htaccess,mod-rewrite,http-accept-language,.htaccess,Mod Rewrite,Http Accept Language,所以我昨天花了一整天的时间寻找解决问题的方法,发现了相似之处,但没有找到完全匹配的。我尝试编写一个.htacces文件,该文件应该检查浏览器语言,然后将用户重定向到(德语)xyz.de/?lang=de&page=$1或(非德语)xyz.de/?lang=en&page=$1 它应该自动加载浏览器语言的主页。到目前为止,我已经没有500个错误了,而且它在IE上运行得非常好,并且确实用正确的语言加载了页面,这给我留下了深刻的印象。但在Firefox或Chrome中,它既不会显示语言也不会显示页面;

所以我昨天花了一整天的时间寻找解决问题的方法,发现了相似之处,但没有找到完全匹配的。我尝试编写一个.htacces文件,该文件应该检查浏览器语言,然后将用户重定向到(德语)xyz.de/?lang=de&page=$1或(非德语)xyz.de/?lang=en&page=$1

它应该自动加载浏览器语言的主页。到目前为止,我已经没有500个错误了,而且它在IE上运行得非常好,并且确实用正确的语言加载了页面,这给我留下了深刻的印象。但在Firefox或Chrome中,它既不会显示语言也不会显示页面;如果我使用var_dump($_GET),我将一无所获

.htaccess

    RewriteEngine on
    RewriteCond %{HTTP_ACCEPT_LANGUAGE} ^(de|de-at|de-li|de-lu|de-ch) [NC]
    RewriteRule ^([^./]{3}[^.]*)$   /index.php?lang=de&page=$1 [QSA,L] 
    RewriteCond %{HTTP_ACCEPT_LANGUAGE} !^(de|de-at|de-li|de-lu|de-ch) [NC] 
    RewriteRule ^([^./]{3}[^.]*)$   /index.php?lang=en&page=$1 [QSA,L]<i>
数组(2){[“page”]=>string(0)”“[“lang”]=>string(2)“de”}

[壁虎]xyz.de

    var_dump($_GET)
数组(0){}

[GECKO]xyz.de/home

    var_dump($_GET)
有人知道问题出在哪里吗

数组(2){[“lang”]=>string(2)“en”[“page”]=>string(4)“home”}

//改变

感谢上一篇文章,我更改了以下代码:

    RewriteCond %{HTTP:ACCEPT_LANGUAGE} !^(de) [NC]
    RewriteRule ^([^./]{3}[^.]*)$ /index.php?page=$1&lang=en [QSA,L]

    RewriteRule ^([^./]{3}[^.]*)$ /index.php?page=$1&lang=de [QSA,L]

现在它没有重定向任何内容,只是当我将/home放在第二页或其中任何内容中时,它总是用英语加载页面,并且如果你按xyz.de,它应该将页面重定向到xyz.de/lang=[ACCEPT-lang]&page=home,尝试使用
%{HTTP:ACCEPT Language}
而不是
%{HTTP\u ACCEPT\u Language}


博客文章非常有用。

您是否查看了每个测试浏览器发送的实际HTTP头?他们一定是失败的原因。我想,我希望这里有人,曾经有过同样的问题。标题明确地发送接受语言:Chrome:Accept Language:en-US,en;q=0.8火狐:接受语言:en-US,en;q=0.5看起来FF&Chrome确实会将重写写入浏览器字段,但不会将参数写入$\u GET//Sry,因为我的英语不好。顺便说一句,您可以安全地删除第二个
RewriteCond
。如果第一个匹配,则重写将在第一个
重写规则
处终止。如果你不想抓住所有的请求…我对你在这里的评论有点困惑。。。你说FF&Chrome会在位置上显示他们的url吗?看到你的规则我很惊讶。这里没有重定向。这个正则表达式的意思是什么:
^([^./]{3}[^.]*)$
?所有不是以句点(
)或斜杠(
)三个字符开头的字符,后面是不包含句点(
)的字符,一直到结尾?奇怪的图案。。。
    RewriteCond %{HTTP:ACCEPT_LANGUAGE} !^(de) [NC]
    RewriteRule ^([^./]{3}[^.]*)$ /index.php?page=$1&lang=en [QSA,L]

    RewriteRule ^([^./]{3}[^.]*)$ /index.php?page=$1&lang=de [QSA,L]