所以我正在尝试编写一个规则,如果某些字符串被传递给任何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
答案 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]
?:
只是说没有抓住这个,它只是用于分组。 ^
是一种匹配任何东西的方式。 -
表示不会更改网址。