使用RewriteRule阻止文件时包含/排除某些文件

时间:2013-04-23 11:54:56

标签: php .htaccess

this answer的帮助下,我阻止机器人使用此RewriteRule破解我的网络应用程序

RewriteRule (?:foo.php|bar.pl|baz.py) - [R=503,L]

但是,虽然我需要使用503阻止对foo.php的访问,但我还需要访问上述代码阻止的naked-foo.php

是否有任何方法可以从规则中明确排除一组网址。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

RewriteEngine On

# Add files to exclude
RewriteCond %{REQUEST_URI} (1.php|2.html|3.txt) [NC]

# Or add file types to exclude (Remove the previous condition if used)
RewriteCond %{REQUEST_URI} \.(php|html|js)     [NC]

RewriteRule  .* - [L]

# Your rule
RewriteRule (?:foo.php|bar.pl|baz.py) - [R=503,L]

答案 1 :(得分:1)

我给的regular expression似乎过于宽泛。它会阻止包含 foo.phpbar.plbaz.py的所有请求。如果您想要完全阻止/foo.php等等,可以使用^...$

包装模式
RewriteRule ^(?:foo.php|bar.pl|baz.py)$ - [R=503,L]

当脚本可以在子目录中时,前缀为斜杠

RewriteRule /(?:foo.php|bar.pl|baz.py)$ - [R=503,L]

您还可以使用多个规则

RewriteRule ^(?:foo.php|bar.pl|baz.py)$ - [R=503,L]
RewriteRule /(?:foo.php|baz.py)$ - [R=503,L]
RewriteRule /bar.pl$ - [R=503,L]

RewriteRule ^foo.php$ - [R=503,L]
RewriteRule /foo.php$ - [R=503,L]
RewriteRule /bar.pl$ - [R=503,L]
RewriteRule baz.py - [R=503,L]

并按照您的需要具体或宽泛。