我的.htaccess
中有以下正则表达式zip freq office
---- ---- ----
92101 450 office_A, office_B
02124 300 office_A, office_C, office_D
07713 110 office_B
我期待,如果我提供RewriteRule ^([a-z]+)/([a-z]+)/\?(.+)$ ./default.php?controller=$1&action=$2&$3
这样的网址,它会被翻译为mysite.com/controller/action/?v=2
然而,它不起作用。我试着做了
mysite.com/default.php?controller=controller&action=action&v=1
和
RewriteRule ^([a-z]+)/([a-z]+)/[?](.+)$ ./default.php?controller=$1&action=$2&$3
没有用。然后我试着更换? (问号)由x
RewriteRule ^([a-z]+)/([a-z]+)/[\?](.+)$ ./default.php?controller=$1&action=$2&$3
并尝试传递RewriteRule ^([a-z]+)/([a-z]+)/x(.+)$ ./default.php?controller=$1&action=$2&$3
这与预期一样有效。我试过测试我的正则表达式似乎没问题。我做错了什么?
答案 0 :(得分:3)
规则本身未检测到查询字符串。作为参考,需要使用检查QUERY_STRING
的值的单独条件来检查这些。
但是,您实际上不需要在您的情况下执行此操作,因为您只需要使用QSA
(查询字符串追加)标记将v=1
查询参数附加到新URI。 / p>
RewriteRule ^([^/]+)/([^/]+)/$ default.php?controller=$1&action=$2 [QSA,L]
现在,在请求/mycontroller/myaction/?v=1
时,Apache将提供default.php?controller=mycontroller&action=myaction&v=1
。
如果您想将最后一个尾部斜线设为可选,请在其后面添加一个问号(^([^/]+)/([^/]+)/?$
)。
作为参考,[^/]+
表示“一个或多个不是正斜杠的字符”。
答案 1 :(得分:1)
查询字符串不会直接在RewriteRule中解释,但是,您可以轻松地将其附加到最后。
试试这个:
RewriteRule ^([a-z]+)/([a-z]+)/$ ./default.php?controller=$1&action=$2&%{QUERY_STRING}