如何使用.htaccess限制对文件的访问?

时间:2012-09-28 19:50:27

标签: file .htaccess webserver

我想使用.htaccess文件限制对文件的访问。基本上,没有人应该能够使用直接链接到文件来下载文件。但是,该文件应该可以从我的网站访问。

例如,假设我有一个名为Presentation.ppt的文件。我希望访问者可以通过我的网站访问它,但如果他们尝试下载或使用直接链接访问它,那么服务器应该拒绝该请求。

是否可以使用.htaccess做到这一点?

提前谢谢你,

4 个答案:

答案 0 :(得分:1)

您可以拒绝访问除了服务器的每个IPA的目录:

<Directory /dir/of/presentation>
    Order Allow,Deny
    Allow from 127.0.0.1
    Deny from All
</Directory>

正如你所指出的那样,那就好了。

如何将Mod Rewrite与将/ dir / of / presentation / *映射到禁止页面的规则一起使用。这样直接链接就不起作用了。请求http://site/content/presentation.ppt
可以重定向到http://site/forbidden.html

在内部,您可以链接到http://authorizedRequest/presentation.ppt地图到http://site/content/presentation.ppt

这只是通过默默无闻的安全。它不会阻止任何人直接在浏览器中输入您的“秘密”URI。

答案 1 :(得分:1)

  

例如,假设我有一个名为Presentation.ppt的文件。我希望访问者可以通过我的网站访问它,但如果他们尝试下载或使用直接链接访问它,那么服务器应该拒绝该请求。

     

是否可以使用.htaccess做到这一点?

这是可能的,但有办法解决它。您需要检查浏览器发送的引用,但任何人都可以欺骗它,有时浏览器可能会选择甚至不包括引用者。

如果您尝试保护文件Presentation.ppt,请将这些规则放在文档根目录中的htaccess文件中:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^(https?://)?your_website.com
RewriteRule ^/?path/to/Presentation.ppt - [L,F]

如果您想保护文件夹/path/images/,请:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^(https?://)?your_website.com
RewriteRule ^/?path/images - [L,F]

答案 2 :(得分:1)

谢谢大家的回答。我已经尝试了你的所有建议,但我仍然无法让它发挥作用。但是,我确实提出了一个可行的解决方案。

步骤1 :禁用或关闭Web服务器上的选项索引,方法是删除单词索引,使其他所有内容保持不变。在某些情况下,您可以使用.htaccess文件执行此操作。如果您无法使用.htaccess执行此操作,则必须在服务器中查找httpd.conf文件。它通常位于etc / apache / httpd.conf或etc / httpd / conf / httpd.conf中。找到后,在此处关闭此选项。

第2步:在您的网页文件夹中创建一个文件夹,并根据需要调用它,但要确保它不容易猜到或者很明显(即Joe33CompanyOCT2MeBoss)。然后,将要隐藏或保护的文件从访问者移动到此文件夹中。

步骤3:在robot.txt文件中,禁止所有机器人或抓取工具通过输入“禁止您的文件名”索引文件夹或此文件夹中的文件。

第4步:然后,您必须使用下面的类似代码创建PHP文件。以下代码将强制下载。

        $File1 = 'http://yourwebsite.com/Joe33CompanyOCT2MeBoss/Presentation.ppt';
        header("Content-Disposition: attachment; filename=\"".basename($File1)."\"");
        header("Content-Type: application/force-download");
        ob_end_clean();
        flush();
        readfile($File1);
        exit;

这样直接访问文件的路径对访问者来说是隐藏的,即使他们可以直接下载文件,他们也根本不知道该文件的实际URL,因为强制下载php代码并不会显示实际路径文件。所以,现在我访问我网站的访问者必须通过我的网页下载此文件而不是直接下载。

以下stackoverflow问题对帮助我解决编程问题非常有帮助。谢谢,

How to Automatically Start a Download in PHP?

php file force download

答案 3 :(得分:0)

最简单(尽管不是防弹)是在HTTP_REFERER不正确时重定向用户代理。这可以使用服务器配置中的mod_rewrite或.htaccess like文件中的(第二选择)来完成。它有助于简单地链接(通过URL引用您的文件的链接)。

你应该阅读moapaches d_rewrite的精美文档。