有没有办法阻止用户输入网址并获取对特定目录中文件的访问权限,但仍允许PHP脚本访问该文件以进行更改或下载?
换句话说,我想阻止人们输入:http://www.mysite.com/securefolder/file1.pdf。也许可以将它们重定向到不同的页面或其他内容。
但我不想完全锁定文件,因为我仍然需要使用PHP脚本来下载和修改文件。
感谢任何帮助, 感谢
答案 0 :(得分:3)
如果您想要的是特定文件的特定设置,那么您只需要一个非常简单的规则 -
RewriteEngine on
RewriteRule ^/securefolder/file1.pdf$ access_denied.php
可能更好的想法是为整个安全文件夹制定规则 -
RewriteEngine on
RewriteRule ^/securefolder/.*$ access_denied.php
最后一种(可能是最好的)方法是在安全文件夹中创建一个额外的.htaccess
,并拒绝对其进行所有访问。放置这一行 -
deny from all
在所有解决方案中,我们只讨论外部请求。脚本,文件等的所有脚本和内部路径将保持不变,不受.htaccess
文件中定义的规则的影响。
答案 1 :(得分:2)
禁止直接访问Web服务器上的文件,并从PHP脚本提供文件(本手册页上的一些提示:http://www.php.net/manual/en/function.readfile.php)。 Web服务器访问限制不会影响PHP,因为它直接访问文件系统。这是一个类似的问题:Secure files for download
如果性能至关重要,大多数网络服务器都有插件可以帮助您直接提供文件(绕过PHP):
答案 2 :(得分:1)
理想的方法取决于PHP脚本是在本地访问磁盘上的PDF文件,还是通过http远程访问。
如果PHP脚本在磁盘上本地访问该文件,只需将该文件放在网站的根文件夹之外。
如果PHP脚本通过http远程访问文件,这里有一些选项:
按来源IP限制访问
密码保护资源并通过https提供
答案 3 :(得分:1)
如果文件位于同一服务器上,则无需下载它们即可为其提供服务。只需从文件系统中读取它们并直接输出即可。
但是,如果它们不是,并且您需要脚本才能下载文件,而其他文件被拒绝,则可以使用密码保护目录。
要使用例如cURL下载文件,您可以指定以下选项:
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
答案 4 :(得分:0)
将您的数据文件放在公共网络空间之外。使用PHP读取文件并提供服务。
除非您希望公开提供该文件,否则没有理由将源文件放在Web主机的DocumentRoot中。
PHP脚本以本地用户身份运行,因此即使在Apache(或其他)Web服务器范围之外也可以读取该文件。