Laravel旧子域名重定向至新子域名时public路径冗余问题排查
解决Laravel旧子域名重定向到新子域名时带public的问题
原因分析
你的旧子域名服务器配置大概率仍将文档根目录指向Laravel项目的根目录(而非public文件夹),当访问旧域名根路径时,服务器默认加载public/index.php,导致RewriteRule捕获到的路径是public,最终重定向到新域名的/public路径。而新域名的文档根目录已经指向public,该路径自然不存在,引发404错误。
修复方案
修改旧子域名下的.htaccess规则,确保重定向时剥离public前缀,或者针对不同路径做精准重定向:
方案1:自动去除public前缀的通用重定向
RewriteEngine On # 若请求路径包含public,重定向到新域名时自动去掉该前缀 RewriteRule ^public/(.*)$ https://new.website.com/$1 [R=301,L] # 其他所有请求直接映射到新域名的对应路径 RewriteRule ^(.*)$ https://new.website.com/$1 [R=301,L]
方案2:针对根路径单独处理
RewriteEngine On # 单独处理根路径请求,直接跳转至新域名根目录 RewriteRule ^$ https://new.website.com/ [R=301,L] # 所有子路径请求保持原路径跳转 RewriteRule ^(.*)$ https://new.website.com/$1 [R=301,L]
额外建议
- 调整旧子域名配置:如果旧项目文件已无需保留,可直接将旧子域名的文档根目录也指向新域名的
public文件夹,从根源避免路径混淆。 - 验证重定向结果:用
curl -I https://old.website.com和curl -I https://old.website.com/login测试,确认跳转后的URL不含public且返回301状态码。
内容的提问来源于stack exchange,提问作者d3v
相关产品推荐
相关产品推荐

