2012-12-24 141 views
5

我在服务器上的下载目录中有.doc.zip文件。 谁访问我的网站页面(download-file.php)只有那些用户应该能够下载这些文件和其他不应该。DENY使用php直接下载文件

我想上面实现,但没有运气...

我仍然能够把直接文件地址(http://example.com/sample.doc)在浏览器中,我可以下载我不想要的任何东西。即使其他人给任何网站上的文件的链接,然后也不应该发生下载

任何人都可以请分享一些想法..我应该做到这一点。

谢谢你提前。

回答

12

在你的文档根htaccess的文件,你可以包括以下规则:

RewriteEngine On 
# you can add whatever extensions you want routed to your php script 
RewriteCond %{REQUEST_URI} \.(doc|zip|pdf)$ [NC] 
RewriteRule ^(.*)$ /download-file.php?filename=$1 [L] 
download-file.php

然后,您可以显示任何你需要显示和下载链接,你的PHP脚本可以只即可食用使用文件php's readfile() (see link for examples)

+0

非常感谢Jon ...工作得像魅力....再一次感谢.. – SmartDev

+0

如果直接访问文件,这将工作,但当正在查看同一文件时,这不起作用。 – Slimshadddyyy

3

你应该禁止访问您的文件目录,并提供下载只PHP驱动(与PDF的例子):

数据/的.htaccess(Google搜索):

deny from all 

的download.php:

/* User access check here, prior to the following code */ 

$name = 'MyPDF.pdf'; 
$filename = 'data/pdf_12345.pdf'; 
header('Content-Disposition: attachment; filename="'.$name.'"'); 
header("Content-Type: application/pdf"); 
header("Content-Length: " . filesize($file)); 
fpassthru($filename) 

当然,你可以设置每个用户和每个请求的不同的文件名,如download.php?file=MyPDF

+0

我认为设置文件夹访问级别可以做到这一点。所以不能下载文件。但是你提到的诀窍是它会直接拒绝直接访问该文件,比如通过直接输入url'ab.com/mypdf.pdf',以及在哪里放置你的答案代码? –

+0

不,它不会自动拒绝直接访问 - 您也必须这样做。我更新了答案。 – Pharaoh

0

您应该能够使用类似于下面的代码的方法直接访问您的内容限制人们:

的RewriteCond%{HTTP_REFERER}^HTTP://your_domain.com/.* $ [NC]

的RewriteCond%{HTTP_REFERER}^HTTP:!//your_domain.com$ [NC]

的RewriteCond%{HTTP_REFERER}^HTTP:!//www.your_domain.com/.*$ [NC]

的RewriteCond%{HTTP_REFERER}^HTTP:。//www.your_domain.com$ [NC]

重写规则*(JPG | JPEG | GIF | PNG | BMP | PDF | DOC)$ http://your_domain.com/no_access.php [R, NC]

这会阻止人们直接链接来自您网站的图片,pdf或文档。然后,具有这些扩展名的文件只能从您的网站访问。如果有人试图直接链接或访问您的文件,他们会体验到您选择的任何内容(您将放置在no_access.php中)。

+0

这不是保证,查阅者可以很容易地伪造来绕过支票。 –

0

如果你有一个专用的服务器最简单的,在我看来最安全的方法是将文件存储在/ var/WWW外/

例如,你可以创建一个文件夹在/ var/webdocs/并将它们存储在那里。