在我的.htaccess中,我有以下
RewriteEngine On
RewriteRule ^users/?$ users.php
RewriteRule ^users/([a-z]+)/?$ users.php?username=$1
如果我这样做,一切都按预期工作
http://example.com/users/
http://example.com/users/joeschmoe/
并且PHP将读取“joeschmoe”作为
的值 $_GET['username']
然而,如果我这样做
http://example.com/users/joeschmoe/?foo
PHP不会拿起
$_GET['foo']
知道为什么会这样,以及如何让它发挥作用?谢谢你的时间!
答案 0 :(得分:6)
将[QSA]
选项添加到RewriteRule,这将使apache能够将查询字符串附加到重定向的网址:
RewriteRule ^users/?$ users.php [QSA]
RewriteRule ^users/([a-z]+)/?$ users.php?username=$1 [QSA]
答案 1 :(得分:4)
您可能正在寻找RewriteRule的“QSA”选项:
'
qsappend|QSA
'(查询字符串追加)
这个标志强制重写 引擎附加查询字符串部分 取代字符串的 现有的字符串,而不是替换 它。如果要添加更多内容,请使用此选项 通过重写将数据写入查询字符串 规则。
该页面还指出:
修改查询字符串
默认情况下,传递查询字符串 通过不变。你可以, 但是,在。中创建URL 包含查询的替换字符串 字符串部分。只需使用一个问题 在替换字符串中标记为 表明以下文字 应该重新注入查询 串。
当你想要擦除 现有的查询字符串,结束 替换字符串只有一个 问号。
结合新的 和旧的查询字符串,使用[QSA]
标志强>
在你的情况下,这样的事情应该做:
RewriteEngine On
RewriteRule ^users/?$ users.php
RewriteRule ^users/([a-z]+)/?$ users.php?username=$1 [QSA]