Apache 2.2.x下使用mod_rewrite拦截恶意脚本请求的配置失效问题求助
Apache 2.2.x下使用mod_rewrite拦截恶意脚本请求的配置失效问题求助
嘿,我来帮你排查这个问题!你作为mod_rewrite新手犯的这个错其实挺常见的,咱们直接看核心问题:
你的RewriteCond里用了${REQUEST_URI},但Apache的mod_rewrite服务器变量是用**百分号(%)**开头的,不是美元符号($)!美元符号一般用来引用RewriteRule里的捕获组,而服务器变量的正确写法是%{REQUEST_URI}。
把这个小错误修正后,你的配置就能正常工作了,修改后的代码如下:
<IfModule mod_rewrite.c> RewriteEngine On # 修正变量为%{REQUEST_URI},NC表示忽略大小写匹配 RewriteCond %{REQUEST_URI} evildoing.php [NC] # 返回403 Forbidden错误,L表示终止后续规则执行 RewriteRule ^(.*)$ - [F,L] </IfModule>
另外补充两个小建议,让你的拦截逻辑更严谨:
- 如果想精准匹配以
evildoing.php结尾的请求,可以把Cond规则改成%{REQUEST_URI} /evildoing.php$ [NC],加上结尾锚点$和开头的斜杠,避免误拦截比如myevildoing.php这类无关请求 - 如果还要拦截带参数的请求(比如
evildoing.php?foo=bar),当前配置已经能覆盖,因为REQUEST_URI包含路径部分;如果需要针对参数做额外限制,可以再加一条RewriteCond %{QUERY_STRING} 匹配规则
这样调整后,就能实时给请求恶意脚本的用户返回403错误啦,比动态维护IP黑名单要及时得多~
备注:内容来源于stack exchange,提问作者Johnny Canuck
相关产品推荐
相关产品推荐

