使用 Mod_redirect QUERY_STRING 屏蔽 URL

使用 Mod_redirect QUERY_STRING 屏蔽 URL

我正在尝试编写重写规则来阻止具有某些特定模式的 URL。请求如下,如 Apache 日志中所示。

"GET /mysecure/Docs?cb=20414624755 HTTP/1.1" 200 881107 "-" "Mozilla/5.0 (Windows NT 6.1; rv:53.0) Gecko/20100101 Firefox/53.0" 

我想用 阻止所有请求QUERY_STRING cb=20414624755

为此,我写了以下规则

RewriteCond %{QUERY_STRING} "^cb=20414624755$" [nocase]
RewriteRule ^\/mysecure\/Docs$ - [forbidden,last]

但是请求并没有被阻止。在 apache 访问日志文件中,我可以看到200 Response code具有这些模式的请求。

请提出建议。

答案1

RewriteCond %{QUERY_STRING} "^cb=20414624755$" [nocase]
RewriteRule ^\/mysecure\/Docs$ - [forbidden,last]

如果直接在服务器配置(或虚拟主机)中使用这些指令,它们将匹配所述请求。但是,RewriteRule 图案如果用于目录.htaccess上下文(我只能假设它们在这种情况下被使用在哪里?)。

在文件中使用时,首先从与文件匹配的 URL 路径中删除.htaccess目录前缀(文件所在的位置)。.htaccessRewriteRule 图案。目录前缀始终以斜杠结尾,因此匹配的 URL 路径永远不会以斜杠开头。

为了使其在服务器和目录上下文中工作,您可以使前面的斜杠成为可选的:

RewriteCond %{QUERY_STRING} ^cb=20414624755$ [NC]
RewriteRule ^/?mysecure/Docs$ - [F]

正则表达式中无需转义斜线。我使用了简写旗帜,因为它们的使用更为普遍。与 一起使用时,不需要L( )lastF与(forbidden- 它是隐含的。条件模式这里不需要。

相关内容