我正在尝试编写重写规则来阻止某些特定模式的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 。
请build议。
RewriteCond %{QUERY_STRING} "^cb=20414624755$" [nocase] RewriteRule ^\/mysecure\/Docs$ - [forbidden,last]
如果这些指令直接在服务器configuration(或虚拟主机)中使用,则这些指令将与所述的请求匹配。 但是,如果在目录或.htaccess上下文中使用RewriteRule 模式 (我只能假设它是在这个实例中使用的地方),它将不会匹配URLpath。
在.htaccess文件中使用时,首先从与RewriteRule 模式匹配的URLpath中删除( .htaccess文件所在位置)的目录前缀。 目录前缀总是以斜线结尾,所以匹配的URLpath永远不会以斜杠开始。
要在服务器和目录上下文中同时工作,可以使前面的斜杠为可选:
RewriteCond %{QUERY_STRING} ^cb=20414624755$ [NC] RewriteRule ^/?mysecure/Docs$ - [F]
正则expression式中没有必要逃避斜杠。 我使用了速记标志 ,因为它们在使用上比较常见。 与F ( forbidden )一起使用时, L ( last )不是必需的 – 这是隐含的。 这里不需要CondPattern的引号。