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

Apache htaccess拒绝访问文件,除非从服务器上的特定子文件夹访问,apache,.htaccess,security,mod-rewrite,Apache,.htaccess,Security,Mod Rewrite,我在webshare的根目录中有一个文件夹,其中保存着半机密的pdf文档。我希望任何访问该文件夹或其文件的人都会遇到权限错误。这很容易设置,我有它的工作 <FilesMatch "\.pdf$"> Order Allow,Deny Deny from all </FilesMatch> 命令允许,拒绝 全盘否定 但是,我希望服务器上有一个子文件夹,其中包含能够链接到这些PDF文件的PHP脚本。注;我不希望php能够在服务器内部读取文件,但是对于直接链接这些受限文

我在webshare的根目录中有一个文件夹,其中保存着半机密的pdf文档。我希望任何访问该文件夹或其文件的人都会遇到权限错误。这很容易设置,我有它的工作

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

命令允许,拒绝
全盘否定
但是,我希望服务器上有一个子文件夹,其中包含能够链接到这些PDF文件的PHP脚本。注;我不希望php能够在服务器内部读取文件,但是对于直接链接这些受限文件的http请求,突然之间就可以了


我了解到,子文件夹中的htaccess文件可以推翻根文件夹htaccess文件中设置的文件夹路径的上级规则。为此,我使用php脚本(使用allow from all)在特定子文件夹中设置了一个htaccess文件,但它似乎不起作用。

如果您在
/secret/
文件夹中有pdf,并且您在该文件夹中有一个htaccess文件,则该文件将在访问pdf时被评估,无论是谁或从何处访问它。就Web服务器和htaccess文件中的内容而言,从google结果列表访问PDF的人与您设置的链接到他们的页面之间的唯一区别是引用者

从谷歌上看,推荐人的样子是:
https://www.google.com/search?q=secret+pdf
(或其他)

从您设置的页面中,referer将看起来像您设置的页面的URL。就这样,没有其他区别。这意味着,你可以与推荐人进行匹配,看看是否有人从谷歌或你的页面点击了你的PDF链接。问题是,任何人都可以让推荐人做任何他们想要的事情。它可以被完全伪造成任何东西,因此,如果这是为了防止未经授权的访问,那么HTTP referer是最糟糕的方法

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

pdf目录中htaccess文件中的这些规则将阻止从以下位置链接:
http://www.yourdomain.com/your_page.html
,除非引用者是伪造的。

请记住,欺骗HTTP引用者是可能的,嗨,Jon Lin。感谢您的回复。确认;使用referer代码绝对是我检测文件访问权限的唯一方法?@AdamJones告诉您某人从何处单击链接的唯一方法,访问文件就是访问文件,referer告诉您从何处访问文件