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 请求,则访问不会被阻止。
目标是限制直接浏览器访问主文件夹中所有 *.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 请求,则访问不会被阻止。