htaccess如何限制主目录下数字子文件夹内PDF直接访问且不影响PHP读取
问题解决说明
现有RewriteRule不生效的原因
你编写的规则存在两处核心问题导致无法生效:
- 正则匹配逻辑错误:原有规则
RewriteRule ^work/books/([0-9]+)/\.pdf)$ [F,L,NC]只能匹配数字文件夹下名称直接为.pdf的特殊文件,没有匹配任意pdf文件名的通配逻辑 - 语法存在冗余错误:规则中多了一个多余的右括号,同时缺少重写规则要求的目标位参数
修正后的生效规则
使用以下规则即可实现需求:RewriteRule ^work/books/([0-9]+)/.*\.pdf$ - [F,L,NC]
规则逻辑说明:
^work/books/([0-9]+)/匹配work/books目录下所有纯数字命名的子文件夹.*\.pdf$匹配上述子文件夹下所有后缀为- 中间的
-代表不做跳转,直接返回状态码F标识返回403禁止访问状态,L代表匹配到该规则后不再执行后续重写规则,NC代表匹配时忽略大小写
PHP是否还能读取这些PDF文件
可以正常读取,原因如下:
- Apache的Rewrite规则仅限制通过HTTP/HTTPS发起的外部浏览器访问请求,不会拦截服务器本地的文件系统操作
- PHP读取文件是调用服务器本地文件IO接口,属于服务器内部操作,完全不受Web层面的访问控制规则影响
- 若需额外管控访问权限,可以在PHP读取文件的业务逻辑中自行加校验规则,避免权限溢出
内容的提问来源于stack exchange,提问作者Cristian C
相关产品推荐
相关产品推荐

