这是我的重写规则
RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]
当我去这个网址时
http://localhost/ub/ab?uri=cd
$_GET['uri']
返回cd
,而不是ab
。
如何让$_GET['uri']
返回ab
?或者这是QSA的真实行为?
感谢,
修改
.htaccess
文件位于ub
目录中,ab
目录永远不存在。
答案 0 :(得分:2)
不要使用$ _GET来检索uri参数 - .htaccess规则不会覆盖呈现给脚本的URI,因此您可以通过解析$_SERVER['REQUEST_URI']
来检索URI的“ab”部分
我见过几个PHP应用程序 - 比如Joomla!和Magento - 其.htaccess文件只是将所有内容重定向到“index.php”,并将其留给PHP路由代码将URI转换为要显示的页面。
答案 1 :(得分:0)
在您的情况下$_GET['uri']
由于cd
而真的是?uri=cd
。 ab
是网址的一部分,而不是GET查询的一部分。
我认为这是因为您在uri=
和您访问的地址(RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]
)中定义了http://localhost/ub/ab?uri=cd
GET查询参数。它被第二个覆盖了。
查找
http://localhost/ub/ab?uri=cd
(查询字符串为?uri=cd
)index.php
,并在uri
GET参数(> index.php?uri=ub/ab
)QSA
)追加查询字符串,因此我们得到index.php?uri=ub/ab&uri=cd
所以uri=
在最终请求中放置了两次,并被第二次请求覆盖。
只需重命名一个GET uri
参数。
答案 2 :(得分:0)
让你的RewriteRule忽略/覆盖之前的查询字符串:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?uri=$1 [L]