如何全站禁用目录访问仅开放指定目录及修复RewriteRule引发的403错误
403错误触发原因
你根目录重写规则的最后一行正则^([A-Za-z0-9_/]+)$没有排除实际存在的目录请求,且匹配逻辑会把带末尾斜杠的目录路径(比如myFolder/)识别为合法匹配项,重写后得到/myFolder/.html的目标路径。
由于Apache默认禁止访问以.开头的隐藏文件(.html属于这类文件),因此不会返回404,而是直接响应403错误。
修复方案
- 修正根目录的.html后缀移除规则,在触发重写前增加文件、目录存在判断,跳过合法的实体资源请求,修改后的第7部分规则如下:
# (7) RewriteBase / RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.+)\.html\ HTTP/ RewriteRule ^(.+)\.html$ https://mywebsitenameredacted.com/$1 [R=302] # 新增以下两条排除条件 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([A-Za-z0-9_/]+)$ /$1.html [L]
- 修正
myFolder目录下的.htaccess配置,适配Apache 2.4+的新访问控制语法(旧版Allow from all已废弃,未开启兼容模块时不会生效):
Options +Indexes Require all granted
修改后等待.htaccess规则自动生效即可实现全站禁用目录索引,仅开放myFolder目录的列表权限。
内容的提问来源于stack exchange,提问作者A__
相关产品推荐
相关产品推荐

