Apache Directory块路径必须与DocumentRoot严格对齐,使用完整绝对路径;按最长路径优先匹配,Require须显式声明;生产环境应设AllowOverride None以杜绝.htaccess干扰。

Apache 的
路径必须绝对且与 DocumentRoot 严格对齐
每个
-
正确:DocumentRoot 是
/var/www/example.com,则写<directory></directory> -
错误:写成
<directory></directory>或<directory></directory>——前者影响其他站点,后者不匹配,规则不生效
子目录单独定义时,也必须用完整绝对路径:<directory></directory>,不能简写为 <directory></directory>。
最长路径优先,多块共存时别依赖顺序
Apache 按路径长度匹配,不是按配置文件里出现的先后顺序。比如同时存在:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
<directory>Require all denied</directory><directory>Require all granted</directory>
访问 /uploads/test.php 会命中第二个块,不受第一个块影响。但如果写成 <directory></directory>(少个 s),就可能被父级 deny 覆盖,导致 403。
Require 必须显式声明,拒绝不能靠“不写”来实现
Apache 2.4+ 默认不继承拒绝逻辑,没写 Require 不代表禁止,而是向上继承父级策略。常见陷阱:
- 根目录写了
Require all denied,子目录却只写Options -Indexes没写 Require → 子目录仍被 deny - 子目录想放行,必须明确写
Require all granted或更细粒度规则(如Require ip 192.168.1.0/24) - 需要“且”条件(比如 IP + 认证),必须用
<requireall>...</requireall>包裹,否则默认是“或”关系
避免 .htaccess 干扰,优先设 AllowOverride None
如果在 AllowOverride All,那么该目录下任何 .htaccess 文件都能覆盖当前配置,极易造成权限绕过或冲突。
- 生产环境建议设为
AllowOverride None,把所有权限逻辑收归主配置 - 确需动态控制(如 WordPress 的 rewrite 规则),至少限制为
AllowOverride FileInfo,它只允许 FilesMatch、Redirect 等安全相关指令,不开放认证或执行类指令 - 敏感目录(如 /admin、/backups)务必禁用 .htaccess:
AllowOverride None+Require all denied

















