【问题标题】:htaccess: block specific IPs, then allow only partial site accesshtaccess:阻止特定 IP,然后只允许部分站点访问
【发布时间】:2014-02-21 10:11:42
【问题描述】:

我管理一个网站,我有一个禁止 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 可以访问 这些公共文件,而我们希望将它们从所有内容中禁止。

【问题讨论】:

    标签: .htaccess


    【解决方案1】:

    将特定 IP 的 Denys 与 Deny from all 结合起来没有意义 - 后者已经包含了每一个特定的。

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

    【讨论】:

    • 感谢您的回答。但是我仍然有关于公共文件的问题(上面引用的 foo.html 和 bar.jpg),我希望这些文件是公开的,但不能被禁止的 IP 访问。就像现在一样,它们可以通过被禁止的 IP 访问。
    • 那是因为你使用了错误的orderDeny, Allow:首先,所有的拒绝指令都被评估;如果匹配,则拒绝该请求,除非它也与 Allow 指令匹配。” – 因此您的 IP Denys 会被评估,但之后 Allow from all 会说,“啊,没关系 –无论如何都进来……”
    • 好的,但是单个文件没有allow from all,只有&lt;FilesMatch foo.html&gt; order deny,allow &lt;/FilesMatch&gt;
    • 这就是为什么我说你必须反其道而行之……
    【解决方案2】:

    使用 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      相关资源
      最近更新 更多