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



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

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中的问号regex?

RewriteRule中的匹配只匹配URI,而不是查询字符串。为了与查询字符串匹配,您需要使用RewriteCond:

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

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

我认为您需要移除硬锚才能开始输入^:

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

或者,如果你想将其限制在特定的域:

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


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

最新更新