mod_rewrite在重写的URL中包含问号

时间:2012-04-27 18:42:22

标签: mod-rewrite

也许我正在尝试做一些不可能的事情,或者我错过了一些完全明显的事情。

我想要做的是重写以下内容:

^/report/user?(.*)$ ./report/user.php?userid=$1 [L,NC]

我尝试使用?转义/\?,但会引发内部服务器错误。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:2)

也许你可以试试:

RewriteCond     %{QUERY_STRING} ^([0-9]+)$
RewriteRule     ^/report/user$ ./report/user.php?userid=%1 [L,NC]

如果您的用户ID是字母数字,那么只需将RewriteCond中的最后一部分更改为([0-9a-zA-Z]+)

答案 1 :(得分:1)

好的,?是正则表达式的1或0次,所以你要问r是否有1次或0次并抓住其他所有内容。如果要将查询字符串捕获到另一个查询中(而不仅仅是传输它),请尝试:

RewriteRule ^/?report/user$ /report/user.php?userid=%{QUERY_STRING} [L,NC]

...在本地计算机?a=1&b=2上测试 - > ?userid=a=1&b=2所以可能不是你想要的

不确定查询字符串的结果如何,但它应该传输它。尝试使用R标志来查看它的外观。如果您只想添加到查询字符串,可以尝试:

RewriteRule ^/?report/user$ /report/user.php?userid=1 [L,NC,QSA]

..在本地计算机上测试查询字符串?a=1&b=2 - > ?userid=1&a=1&b=2

只更改位置而不更改查询不需要QSA

RewriteRule ^/?report/user$ /report/user.php [L,NC]

..在本地计算机上测试查询字符串?a=1&b=2 - > ?a=1&b=2

如果你想要http://htaccess.madewithlove.be/,你可以在这里测试重写,只记得它翻了一次,所以可以测试基本的东西。我不认为QSA(查询字符串追加)编程在其中,但它仍然是一个不错的工具。