根据 URL 中的脚本进行重写

根据 URL 中的脚本进行重写

使用 Apache 2.2.x -- 我通常使用动态创建的带有违规 IP 的“拒绝”列表来阻止脚本小子在服务器上查找各种脚本。虽然有效,但总是至少落后一步。

因此,考虑使用 mod_rewrite 实时发送恶意用户在其他地方寻找特定脚本的消息(具体来说,强制出现 403 错误)。我尝试了几种方法,但似乎不起作用。例如,假设脚本是 evildoing.php。某个地方的某个脚本小子运行机器人在我的服务器上寻找此脚本——例如,URL 可能是http://www.myserver.com/evildoing.php。因此,在 httpd.conf 中,

<IfModule mod_rewrite.c>
  RewriteEngine On
  ReWriteCond ${REQUEST_URI} evildoing.php [NC]
  RewriteRule ^(.*)$ - [F,L]
</IfModule>

但是,这不起作用 - 至少,不是按照书面说明的。[是的,mod_rewrite 已在此机器上静态编译到 apache 中。]

指向我做错的明显的事情?[第一次使用重写,所以......]

答案1

ReWriteCond ${REQUEST_URI} evildoing.php [NC]
RewriteRule ^(.*)$ - [F,L]

你可以使用语法来访问服务器变量%{VAR},而不是${VAR}(这是其他定义变量)。但是,你不需要单独的状况这里。以下内容就足够了:

RewriteRule ^/evildoing\.php$ - [F]

假设规则直接在服务器或者虚拟主机配置(不是<Directory>容器)。如果在目录上下文然后删除斜线前缀。

你不需要L这里的标志,因为它是默示当使用 时F

而且看起来这不需要不区分大小写的匹配?(假设您不是在 Windows 上。)

你不应该将指令包装在<IfModule>容器中,除非它们是选修的

但是,您不需要在这里使用 mod_rewrite。您可以改用容器<Files>Deny(Apache 2.2)。例如:

<Files "evildoing.php">
    Deny from all
</Files>

尽管严格来说这会阻止evildoing.php文件系统上的任何地方(如果它可以在多个目录中存在)。

相关内容