Chr*_*son 4 php mod-rewrite query-string
我有一个基于PHP的Web应用程序,我正在尝试将Apache的mod_rewrite应用于.
原始网址的格式为:http:
//example.com/index.php?page = home&x = 5
我想将它们转换为:http:
//example.com/home?x = 5
请注意,在重写页面名称时,我也有效地"移动"了问号.当我尝试这样做时,Apache愉快地执行这个翻译:
RewriteRule ^/([a-z]+)\?(.+)$ /index.php?page=$1&$2 [NC,L]
Run Code Online (Sandbox Code Playgroud)
但它弄乱了$_GETPHP中的变量.例如,调用http://example.com/home?x=88只产生一个$_GET变量(page => home).哪x => 88去了?但是,当我将规则更改为使用&符号而不是问号时:
RewriteRule ^/([a-z]+)&(.+)$ /index.php?page=$1&$2 [NC,L]
Run Code Online (Sandbox Code Playgroud)
一个类似的调用就像http://example.com/home&x=88我期望的那样工作(即page和x_GET变量都设置得恰当).
我知道差异很小,但我希望我的URL变量能够"开始"带问号,如果可能的话.我确信这反映了我自己对mod_rewrite重定向如何与PHP交互的误解,但似乎我应该能够做到这一点(这样或那样).
提前致谢!
干杯,
-Chris
试试这个:.
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^/([a-z]+)(?:$|\?(?:.+)) /index.php?page=$1 [NC,L,B,QSA,NE]
Run Code Online (Sandbox Code Playgroud)
B逃避反向引用(不应该是必要的,因为它匹配[az] +,但是如果你想稍后扩展它,它可能是有用的).
编辑:添加了RewriteCond.编辑2:QSA负责添加&符号.