Laravel部署到AWS后URL需带public后缀无法隐藏问题
Laravel AWS部署去除URL中public段失效解决方案
1. 排查Apache基础配置
.htaccess规则在AWS环境失效大多是默认Apache配置限制导致,按顺序检查:
- 确认rewrite模块已启用
Debian/Ubuntu环境执行命令:sudo a2enmod rewrite && sudo systemctl restart apache2
Amazon Linux/CentOS环境执行命令:sudo sed -i '/^#LoadModule rewrite_module/s/^#//' /etc/httpd/conf.modules.d/00-base.conf && sudo systemctl restart httpd - 开启目录配置的.htaccess覆盖权限
找到Apache对应站点的配置文件,定位到<Directory "/你的站点根目录绝对路径/projectfoldername">配置块,将其中的AllowOverride None修改为AllowOverride All,保存后重启Apache生效。
2. 修正根目录.htaccess规则
你当前的规则没有适配子目录路径,将projectfoldername目录下的.htaccess内容替换为如下配置:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /projectfoldername/ RewriteCond %{REQUEST_URI} !^/projectfoldername/public/ RewriteRule ^(.*)$ public/$1 [L,QSA] </IfModule>
3. 推荐最优部署方案(安全性更高)
通过重写规则实现去public的方式存在暴露根目录.env等敏感文件的风险,更建议直接修改Apache站点的DocumentRoot配置:
- 将站点DocumentRoot从原来的
/xxx/projectfoldername修改为/xxx/projectfoldername/public - 对应Directory配置块也同步修改为指向public目录
- 重启Apache后无需额外重写规则即可直接通过根路径访问站点,同时避免敏感文件泄露风险。
内容的提问来源于stack exchange,提问作者user3653474
相关产品推荐
相关产品推荐

