htaccess:阻止特定 IP,然后仅允许部分站点访问



我管理一个网站,我有一个被禁止的IP列表,如下所示:

order allow,deny
deny from xxx.xxx.xxx.xxx
deny from yyy.yyy.yyy.yyy
etc...
allow from all

目前为止,一切都好。

现在,已经决定只有一些特定的文件和文件夹应该是公开的,其余的都应该是私人的。

所做的如下:在禁止IP列表的底部,我将其添加到为了阻止一切:

Order allow,deny
deny from All

然后,为了允许访问公共内容,我添加了:

<FilesMatch foo.html>
order deny,allow
</FilesMatch>
<FilesMatch bar.jpg>
order deny,allow
</FilesMatch>

而且,在需要公共访问的文件夹中,我添加了一个特定的 htacces,如下所示:

satisfy any
Order allow,deny
Allow from all

但是现在的问题是根 htacces 禁止的 IP 可以访问这些公共文件,而我们希望禁止它们使用一切。

将特定于 IP 的DenyDeny from all相结合是没有意义的——后者已经涵盖了每个特定的 。

您必须专门为非公共文件和文件夹设置Deny from all

使用mod_rewrite规则可能更容易。请考虑以下代码:

RewriteEngine On
# ban all the IP addresses you want here
RewriteCond %{REMOTE_ADDR} ^(xxx.xxx.xxx.xxx|yyy.yyy.yyy.yyy)$
RewriteRule ^ - [F,L]
# ban all except few allowed files/folders here
RewriteCond %{REQUEST_URI} !/(foo.html|bar.jpg|folder1/|folder2/) [NC]
RewriteRule ^ - [F,L]

这应该放在根 .htaccess 中,并确保从子文件夹中删除所有其他 .htaccess。

最新更新