我想保护 pdf 文件不被直接链接,而是让我的登录用户能够访问它。我有一个链接,该链接当前指向一个发布表单的 javascript 函数: $('nameofdoc').setProperty('value',doc); document.getElementById('sendme').submit();
其中 sendme 是表单的名称,而 nameof doc 是我要显示的文档的索引。
然后转到一个 php 文件:
$docpath = $holdingArray[0].$holdingArray[1];
$file = $holdingArray[0]; //file name
$filename = $holdingArray[1]; //path to the file]
header( 'Location:'.$docpath ) ;
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="'.$filename . '"');
readfile($filename)
这一切都很好,它加载文件并输出pdf。我不能做的是保护目录免受直接链接 - 即 www.mydomain.com/pathToPdf/pdfname.pdf
我曾想过使用 .htaccess 来保护目录,但它位于共享主机上,所以我不确定安全性,无论如何,当我尝试过时,我无法让它工作。
任何帮助都会很棒,因为这是我尝试解决此问题的第四天。
谢谢
更新
我得到了很多帮助,谢谢你,但我还没到那里。
我有一个 .htaccess 文件,当从目录请求 pdf 时,它现在会启动另一个 php 文件:
RewriteEngine on
RewriteRule ^(.*).(pdf)$ fileopen.php
当 fileopen.php 文件启动时,它无法打开 pdf
$path = $_SERVER['REQUEST_URI'];
$paths = explode('/', $path);
$lastIndex = count($paths) - 1;
$fileName = $paths[$lastIndex];
$file = basename($path);
$filepath = $path;
if (file_exists($file)) {
header( 'Location: http://www.mydomain.com'.$path ) ;
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=".$file);
readfile($filepath);
}else{
echo "file not found using path ".$path." and file is ".$file;
}
输出是使用路径 /documents/6/Doc1.pdf 找不到文件,文件是 Doc1.pdf
但是该文件确实存在并且在那个目录中-有什么想法吗?
好的,我很高兴地报告 Jaroslav 确实帮助我解决了这个问题。他的方法效果很好,但很难将所有目录内容排成一行。最后,我花了几个小时玩弄组合来让它发挥作用,但他给出的原则运作良好。谢谢