Laravel 5.8中.htaccess文件异常问题排查与修复
解决Laravel .htaccess修改不生效、错误规则未触发500的问题
你遇到的这个情况确实有点反直觉——正常来说,.htaccess要是有语法错误,Apache肯定会直接抛出500内部服务器错误,但现在Laravel首页还能正常跑,说明要么Apache压根没读你这个.htaccess文件,要么有其他配置把它的规则给覆盖了。咱们一步步来排查:
确认Apache真的在读取你的.htaccess
Apache只有在对应目录的配置里开了AllowOverride All(至少得是AllowOverride FileInfo,毕竟Rewrite规则属于FileInfo类的配置),才会去读.htaccess。你说已经检查过apache2.conf,但可能漏了关键细节:- 找到你Laravel项目根目录对应的
<Directory>配置块,确保AllowOverride不是None,比如:<Directory /var/www/your-laravel-app> AllowOverride All Require all granted </Directory> - 修改完一定要重启Apache:Ubuntu/Debian用
sudo systemctl restart apache2,CentOS/RHEL用sudo service httpd restart
- 找到你Laravel项目根目录对应的
检查虚拟主机配置有没有覆盖.htaccess
Apache的配置优先级是:主配置文件 > 虚拟主机配置 > .htaccess。如果你的虚拟主机里已经写了Rewrite规则,或者DocumentRoot配置有问题,可能直接跳过了.htaccess:- 打开你的虚拟主机配置(一般在
/etc/apache2/sites-available/your-site.conf),确认DocumentRoot是不是指向Laravel的public目录:DocumentRoot /var/www/your-laravel-app/public - 看看里面有没有和.htaccess重复的Rewrite规则,要是有的话,会优先用虚拟主机里的配置。
- 打开你的虚拟主机配置(一般在
用错误规则测试.htaccess是否真的生效
你现在贴的.htaccess是Laravel默认的正确配置,本来就不会触发500错误。要验证它是否真的被读取,故意加个错误规则试试——比如在开头加一行:ThisIsTotallyAnInvalidRule然后刷新网站:
- 如果弹出500错误,说明.htaccess是生效的,之前你觉得“修改未生效”可能是修改的规则本身有问题,或者浏览器缓存了旧响应;
- 如果还是正常显示,那百分百是Apache没读这个.htaccess,回到第一步再仔细检查配置。
清一下Laravel的缓存试试
有时候Laravel的路由缓存、配置缓存会让你误以为是.htaccess的问题:- 清路由缓存:
php artisan route:clear - 清配置缓存:
php artisan config:clear
- 清路由缓存:
再确认一遍mod_rewrite是否真的启用
虽然你说已经检查过,但再确认一次没坏处:- 执行
sudo a2enmod rewrite,如果显示“Module rewrite already enabled”就是已经开了;要是没开,它会帮你启用,之后记得重启Apache。
- 执行
内容的提问来源于stack exchange,提问作者Rohit
相关产品推荐
相关产品推荐

