【发布时间】:2011-02-20 00:01:47
【问题描述】:
我有一个基于 PHP 的 Web 应用程序,我正在尝试将 Apache 的 mod_rewrite 应用到该应用程序。
原始 URL 的格式为:
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]
但是它弄乱了 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&x=88 这样的调用将按照我的预期工作(即page 和x $_GET 变量都已正确设置)。
我知道差异很小,但如果可能的话,我希望我的 URL 变量以问号“开始”。我确信这反映了我自己对 mod_rewrite 重定向如何与 PHP 交互的误解,但似乎我应该能够做到这一点(一种或另一种方式)。
提前致谢!
干杯,
-克里斯
【问题讨论】:
-
查询字符串应始终以问号开头,而不是与号。
标签: php mod-rewrite query-string