我管理一个网站,我有一个被禁止的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 的Deny
与Deny 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。