.htaccess在线校验正常但部署到Apache服务器返回404求助
排查解决步骤
- 先确认Apache rewrite模块已启用
执行以下命令启用模块并重启Apache:
很多默认安装的Apache没有自动开启rewrite模块,会导致所有重写规则不生效。a2enmod rewrite systemctl restart apache2 - 禁用MultiViews选项
将000-default.conf(以及子域名对应的虚拟主机配置)里的Options行修改为:
MultiViews是Apache的内容协商功能,会在匹配到Options Indexes FollowSymLinksapi前缀时自动查找同名的文件/目录,优先级高于rewrite规则,会直接跳过规则匹配返回404。 - 确认子域名虚拟主机的目录配置
如果你为子域名单独配置了虚拟主机,需要确认子域名对应的站点根目录的块配置: - 站点根目录路径是否正确,比如子域名根目录如果是
/var/www/subdomain,需要单独针对该路径配置块 - 对应块内的
AllowOverride All配置是否生效,没有被其他规则覆盖
- 站点根目录路径是否正确,比如子域名根目录如果是
- 校验.htaccess文件本身的有效性
执行ls -a /var/www/你的站点根目录确认文件名为.htaccess,没有额外后缀,文件权限设置为644,属主为www-data,避免权限不足导致Apache无法读取配置。 - 确认重写目标路径存在
检查站点根目录下是否存在api目录,目录内是否存在index.php文件,且该文件的读权限正常,避免重写后目标文件不存在返回404。 - 开启重写日志定位问题
若以上步骤都无效,可以在Apache配置中添加以下参数开启重写日志:
重启Apache后访问报错地址,查看LogLevel alert rewrite:trace3/var/log/apache2/error.log中的重写匹配日志,就能明确看到规则是否被触发、重写后的路径是否符合预期。
内容的提问来源于stack exchange,提问作者Les Martin
相关产品推荐
相关产品推荐

