htaccess - 拒绝访问文件夹中的 pdf 文件

htaccess - Deny access to pdf files in folders

目标是限制直接浏览器访问主文件夹中所有 *.pdf 的各种子文件夹。每个 pdf 文件所在的子文件夹名称仅为数字(字符 0-9;例如“work/books/112/myfile.pdf”)

我目前拥有的是:

RewriteRule ^work/books/([0-9]+)/\.pdf)$ [F,L,NC]

其中 'books' 是我的主文件夹,然后是 pdf 文件所在的任何数字文件夹。

这似乎行不通,我也不确定虽然此重写规则会阻止直接访问这些 pdf 文件,但我是否仍能通过 php 阅读 pdf 文件?

该规则缺少扩展名前的文件名部分 (.pdf),因此正则表达式应为

^work/books/[0-9]+/[^/]+\.pdf

也不需要捕获任何部分,这意味着您可以省略所有括号,顺便说一句,在您的示例中这些括号是不平衡的。

RewriteRule 指令的另一部分是替换,在本例中可能只是一个破折号。所以把它们放在一起,就变成了

RewriteRule ^work/books/[0-9]+/[^/]+\.pdf$ - [F]

如@OlafDietsche 的回答所述,您没有匹配正则表达式中请求的 URL 的 myfile 部分,因此该指令永远不会匹配。

您可以通过使用带有 mod_authz_core 的 Apache <If> 表达式来避免使用 mod_rewrite。例如:

<If "%{REQUEST_URI} =~ m#/work/books/\d+/[^/]+\.pdf$#">
    Require all denied
</If>

或者干脆阻止对服务器上所有 .pdf 文件的直接访问:

<Files "*.pdf">
    Require all denied
</Files>

prevents direct access of those pdf files, will I still be able to read the pdf files via PHP

如果您没有从 PHP 为这些 .pdf 文件发出 HTTP 请求,则访问不会被阻止。