我有一个基于PHP的Web应用程序,我正在尝试将Apache的mod_rewrite应用于.
请注意,在重写页面名称时,我也有效地“移动”了问号.当我尝试这样做时,Apache愉快地执行这个翻译:
RewriteRule ^/([a-z]+)\?(.+)$/index.php?page=$1&$2 [NC,L]
但它弄乱了PHP中的$_GET变量.例如,调用http://example.com/home?x=88只会产生一个$_GET变量(page => home). x =>在哪里88去?但是,当我将规则更改为使用&符号而不是问号时:
RewriteRule ^/([a-z]+)&(.+)$/index.php?page=$1&$2 [NC,L]
像http://example.com/home\u0026amp;x=88这样的调用将像我期望的那样工作(即页面和x $_GET变量都设置得恰当).
我知道差别很小,但我希望我的URL变量能够“开始”带有问号,如果可能的话.我确信这反映了我自己对mod_rewrite重定向如何与PHP交互的误解,但似乎我应该能够做到这一点(这样或那样).
提前致谢!
干杯,
-克里斯
解决方法:
试试这个:.
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^/([a-z]+)(?:$|\?(?:.+)) /index.php?page=$1 [NC,L,B,QSA,NE]
B逃避反向引用(不应该是必要的,因为它匹配[a-z],但是如果你想稍后扩展它,它可能是有用的).
编辑:添加了RewriteCond.
编辑2:QSA负责添加&符号.
标签:php,query-string,mod-rewrite
来源: https://codeday.me/bug/20190526/1158924.html