You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2上Laravel除根路由外均返回404的解决方案咨询

解决AWS EC2上Laravel非根路由404及rewrite模块启用问题

看起来你遇到了Laravel部署后的典型路由问题,还碰到了Apache模块命令的小坑——毕竟AWS EC2默认用的是CentOS/RHEL体系的httpd服务,和Ubuntu的a2enmod那套命令不兼容,咱们一步步来搞定:

1. 先搞定rewrite模块的启用问题

a2enmod是Debian/Ubuntu系Apache的模块管理命令,在CentOS/RHEL的httpd里根本不存在,得用下面的方式启用rewrite:

  • 先检查rewrite模块是否已经加载:
    httpd -M | grep rewrite
    
    如果输出包含rewrite_module (shared),说明模块已经加载,直接跳过下一步;如果没输出,继续下面的操作。
  • 编辑模块配置文件,启用rewrite:
    sudo vi /etc/httpd/conf.modules.d/00-base.conf
    
    找到这行注释掉的代码:
    #LoadModule rewrite_module modules/mod_rewrite.so
    
    把前面的#删掉,保存退出。
  • 重启httpd服务让配置生效:
    sudo systemctl restart httpd
    

2. 配置Apache允许.htaccess覆盖规则

Laravel的路由依赖public目录下的.htaccess文件,必须让Apache允许该目录使用AllowOverride:

  • 打开httpd主配置文件:
    sudo vi /etc/httpd/conf/httpd.conf
    
  • 找到对应项目public目录的<Directory>配置块(比如你的Laravel项目放在/var/www/html/laravel/public),修改成下面的内容:
    <Directory "/var/www/html/laravel/public">
        AllowOverride All
        Require all granted
    </Directory>
    
    注意:一定要确保路径和你的实际项目路径一致,AllowOverride必须设为All(默认可能是None)。

3. 检查Laravel的.htaccess文件

部署新版本时很容易不小心覆盖或漏掉这个文件,确认public目录下存在.htaccess,且内容为Laravel默认的规则:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

如果文件不存在,直接从Laravel项目的默认模板中复制一份到public目录即可。

4. 修复文件权限问题(容易忽略的点)

确保httpd进程有足够权限读取项目文件:

sudo chown -R apache:apache /var/www/html/laravel
sudo chmod -R 755 /var/www/html/laravel/storage
sudo chmod -R 755 /var/www/html/laravel/bootstrap/cache

5. 验证与排查

完成上面的步骤后,重启httpd服务,再次访问非根路由(比如/dashboard),如果还是404,可以查看Apache的错误日志找具体原因:

sudo tail -f /var/log/httpd/error_log

日志里会明确提示是配置错误、权限问题还是文件缺失,跟着提示调整即可。

内容的提问来源于stack exchange,提问作者PHP User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:12:52