mod_rewrite匹配QUERY_STRING

时间:2017-05-16 00:26:23

标签: regex apache .htaccess mod-rewrite

所以我正在尝试编写一个规则,如果某些字符串被传递给任何PHP脚本,它将以404响应。以下是我提出的建议:

RewriteBase /

RewriteCond %{QUERY_STRING} ^.*(string1|string2).*$ [NC]
RewriteRule ^$ [R=404,L]

该规则似乎仅匹配www.domain.com/?string1或www.domain.com/?String2,但不符合www.domain.com/whatever.php?var=string1或www.domain.com/目录/ script.php?var = string1或www.domain.com/directory/1/script.php?var=string1等。

任何人都可以帮忙并指出我做错了吗?

最佳,

-Iulian

2 个答案:

答案 0 :(得分:1)

你的RewriteRule需要一个空路径。试试这样:

RewriteBase /

RewriteCond %{QUERY_STRING} ^.*(string1|string2).*$ [NC]
RewriteRule ^.*$ - [NC,L]

答案 1 :(得分:1)

正如Kevin所说,您需要在查询字符串之前使用^$的空URL。您不需要全部.*,也不必匹配完整字符串。这将有效,您不需要RewriteBase

RewriteCond %{QUERY_STRING} (?:string1|string2) [NC]
RewriteRule ^ - [R=404,L]

?:只是说没有抓住这个,它只是用于分组。 ^是一种匹配任何东西的方式。 -表示不会更改网址。