htaccess:禁止所有pdf文件但允许来自php脚本(文件下载脚本)

时间:2015-11-20 07:59:12

标签: php .htaccess pdf mod-rewrite file-access

我写了一个小的下载脚本来隐藏文件路径,文件" get_file.php"处理一切。 下一步我想禁止htaccess通过浏览器直接访问所有pdf文件(如果有人知道该文件的确切URL),但仍然提供对我的" get_file.php"的文件的访问权限。

我试过了:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(pdf)$ - [F]

任何想法?

3 个答案:

答案 0 :(得分:4)

在.htaccess:

的顶部尝试此规则
RewriteEngine on 

RewriteCond %{THE_REQUEST} \.pdf[?\s] [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteRule ^ - [F]

答案 1 :(得分:2)

试试这个:

<强> get_file.php

<?php
    // You can add extra codes to get your pdf file name here
    $file = 'file.pdf';

    if (file_exists($file)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="'.basename($file).'"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        readfile($file);
        exit;
    }
?>

答案 2 :(得分:1)

第一步 - htaccess - 我通常使用FilesMatch的方式不同:

<FilesMatch "\.pdf$">
    Order allow,deny
    Deny from all
</FilesMatch>

第二步是你的PHP文件 - 你只需使用本地路径加载它并显示它。 /path/to/file.pdf 以下是如何为客户端导出它的示例:correct PHP headers for pdf file download