htaccess拒绝访问文件,除非从服务器上的特定子文件夹访问

时间:2013-09-25 19:23:00

标签: apache .htaccess security mod-rewrite

我的网站共享的根目录中有一个文件夹,其中包含半机密的pdf文档。我希望任何人访问该文件夹或其文件以获取权限错误。这很容易设置,我使用

<FilesMatch "\.pdf$">
 Order Allow,Deny
 Deny from all
</FilesMatch>

但是,我希望服务器上包含PHP脚本的子文件夹能够链接到这些PDF文件。注意;我不希望php能够在服务器内部读取文件,但是对于直接链接这些受限文件的http请求,突然可以。

我读到子文件夹中的htaccess文件可以覆盖根文件夹htaccess文件中设置的文件夹路径上方的规则。为此,我在特定的子文件夹中使用php脚本设置了一个htaccess文件(使用allow from all),但它似乎无法正常工作。

1 个答案:

答案 0 :(得分:2)

如果你在/secret/文件夹中有pdf,并且你在该文件夹中有一个htaccess文件,那么在访问pdf的任何时候都会对文件进行评估,无论是谁访问它或从哪里< / strong>即可。对于网络服务器和htaccess文件中的内容,唯一的区别在于,从谷歌搜索结果列表中访问该PDF的人与您正在设置的链接到他们的页面之间的区别是参考者。

来自谷歌,推荐人看起来像:https://www.google.com/search?q=secret+pdf(或其他)

在您设置的页面中,引用将类似于您设置的页面的URL。就是这样,没有其他区别。这意味着您可以与引用者匹配,以查看是否有人从谷歌或您的页面点击了您的PDF链接。问题是任何人都可以将引用者变成他们想要的任何东西。它可以完全伪造成任何东西,因此如果这是为了防止未经授权的访问,那么HTTP referer就是更糟糕的方法。

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www.yourdomain.com/your_page.html
RewriteRule \.pdf$ - [L,F]

pdf目录中的htaccess文件中的那些规则将阻止除{FER}之外的任何其他地方的链接,除非引用了伪造者。