【发布时间】:2012-12-02 11:37:54
【问题描述】:
所以我昨天一整天都在寻找解决问题的方法,发现了相似之处,但没有完全匹配。我尝试编写一个 .htacces 文件,该文件应该检查浏览器语言,然后将用户重定向到 (GERMAN) xyz.de/?lang=de&page=$1 或 (NONGERMAN) 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>
[IE9] xyz.de
var_dump($_GET)
array(2) { ["page"]=> string(0) "" ["lang"]=> string(2) "de" }
[GECKO] xyz.de
var_dump($_GET)
数组(0) { }
[GECKO] xyz.de/home
var_dump($_GET)
谁知道问题出在哪里???
array(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 oder secondpage 或任何东西放在里面时,它总是以英文加载页面,并且它应该将页面重定向到 xyz.de/lang=[ACCEPT-LANG]&page=如果你按 xyz.de 就回家
【问题讨论】:
-
您是否查看过您测试的每个浏览器发送的实际 HTTP 标头?他们一定是失败的原因。
-
我想,我希望这里有人,曾经有同样的问题。标头明确发出 Accept-Language: Chrome: Accept-Language:en-US,en;q=0.8 FireFox: Accept-Language: en-US,en;q=0.5 看起来 FF&Chrome 确实将 Rewrite 写入到浏览器字段,但没有将参数写入 $_GET// 抱歉我的英语不好。
-
您可以安全地删除第二个
RewriteCond。如果第一个匹配,则重写在第一个RewriteRule处终止。如果不是,您无论如何都想捕获所有请求... -
你在这里的评论让我有点困惑......你说 FF 和 Chrome 让他们的 url 显示在位置被重写?看到你的 RewriteRules 让我大吃一惊。那里没有重定向。
-
这个正则表达式是什么意思:
^([^./]{3}[^.]*)$? 不的所有内容都以恰好三个字符开头,即句点 (.) 或斜杠 (/),然后是任何不包含句点 (.) 的字符,直到结尾?奇怪的图案...
标签: .htaccess mod-rewrite http-accept-language