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