记录一下那天晚上的排查过程。CentOS 7.9 的 Apache 2.4 上把站点目录的 AllowOverride 设成了 None,伪静态规则写在 .htaccess 里,结果所有内页 404,只有首页能打开,日志里是 File does not exist。

刚开始盯着「站点目录的 路径末尾多了斜杠,规则没匹配上」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。AllowOverride None 之后 Apache 根本不读 .htaccess,重写规则一条都没生效。也可能是配置写在 httpd.conf 的全局 Directory 里,站点自己的 vhost 段没有覆盖。

少数情况下是改了配置没重启,Apache 只在启动时读一次 Directory 段。

先确认当前生效的 AllowOverride

httpd -T | grep -n -A3 'Directory /www'

然后改成 All 或至少 FileInfo

sed -i 's#AllowOverride None#AllowOverride All#' /etc/httpd/conf.d/site.conf

再往下确认 .htaccess 能被读到且语法正确

ls -l /www/wwwroot/site/.htaccess && tail -3 /var/log/httpd/error_log

末了重载服务后访问内页验证

httpd -t && systemctl reload httpd

别只看报错消失,验证要多做一步。内页能正常返回 200,error_log 里不再出现 File does not exist,.htaccess 里新增的规则立即生效。

容易忽略的是,AllowOverride All 会让 Apache 每次请求都去读 .htaccess,性能有损耗,生产上更推荐把规则搬到 vhost 里;改目录块时注意路径不要带尾斜杠。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189