匹配.htaccess正则表达式开头的问号

时间:2012-01-30 00:47:44

标签: regex .htaccess

我正在尝试匹配.htaccess中网址http://mydomain.com/?page中的正则表达式?page

RewriteRule ^([\?])page$ ?menyu=404 [L]
RewriteRule ^([\\?])page$ ?menyu=404 [L]
RewriteRule ^(\?)page$ ?menyu=404 [L]
RewriteRule ^(\\?)page$ ?menyu=404 [L]
RewriteRule ^\?page$ ?menyu=404 [L]
RewriteRule ^\\?page$ ?menyu=404 [L]

对于我的生活,这些都不起作用。

简单地说,我如何匹配.htaccess中的问号正则表达式?

2 个答案:

答案 0 :(得分:4)

RewriteRule中的匹配仅匹配URI,不是查询字符串。要与查询字符串匹配,您需要使用RewriteCond

RewriteCond %{QUERY_STRING} ^page$
RewriteRule ^ /?menyu=404 [L]

请注意,%{QUERY_STRING}变量不包含前导

答案 1 :(得分:-1)

我认为你需要删除硬锚到输入开始^

RewriteRule ^.*\?page$ ?menyu=404 [L]

或者,如果您想将其限制在该特定域:

RewriteRule ^mydomain.com\?page$ ?menyu=404 [L]


文字问号的正则表达式为\?
在字符类中,不需要转义任何内容(]除外),因此[?]也可以。