也许我正在尝试做一些不可能的事情,或者我错过了一些完全明显的事情。
我想要做的是重写以下内容:
^/report/user?(.*)$ ./report/user.php?userid=$1 [L,NC]
我尝试使用?
转义/\?
,但会引发内部服务器错误。
有没有办法实现这个目标?
答案 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
(查询字符串追加)编程在其中,但它仍然是一个不错的工具。