Nginx/htaccess配置问题:无法获取路径后的QueryString参数
解决Apache RewriteRule无法获取QueryString参数的问题
当前你的Rewrite规则虽然用了[QSA]标记,但$1仅匹配URL的路径部分(也就是示例里的path1/path2/path3/page),QueryString并没有被包含到url变量中。QSA的作用只是把原QueryString追加到重写后的URL末尾,而不是合并到url参数里,这就是你拿不到id和do的原因。
解决方案
如果要把完整路径+QueryString都存入url变量,修改Rewrite规则如下:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)$ index.php?url=$1%{QUERY_STRING:+?%{QUERY_STRING}} [QSA,L]
代码说明
%{QUERY_STRING:+?%{QUERY_STRING}}是条件拼接语法:当URL存在QueryString时,自动添加?并拼接查询字符串;如果没有QueryString,就不添加任何内容,避免生成多余的?。- 修改后,
$_GET['url']的值会是path1/path2/path3/page?id=15&do=post,同时借助[QSA]标记,$_GET['id']和$_GET['do']也能直接获取到。
补充提示
如果不需要把QueryString放到url变量里,只是想在PHP中获取id和do,其实当前规则已经通过QSA把原参数追加到了重写后的URL中,直接用$_GET['id']和$_GET['do']就能拿到,只是url变量仅包含路径部分。
内容的提问来源于stack exchange,提问作者Erdem KOÇHAN
相关产品推荐
相关产品推荐

