Laravel项目URL出现public/public重复跳转及404错误求助
解决Laravel URL出现public/public的重定向问题
排查方向1:修复根目录.htaccess的循环重写问题
当前根目录的.htaccess会把所有请求无条件转发到public/$1,但如果public目录的.htaccess再处理请求,容易出现路径叠加。修改根目录.htaccess,添加条件避免循环:
<IfModule mod_rewrite.c> RewriteEngine On # 仅当请求路径不以public/开头时才执行重写 RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(.*)$ public/$1 [L] </IfModule>
排查方向2:清除Laravel配置缓存
即便.env里的APP_URL正确,旧的配置缓存仍可能导致错误路径生效。执行以下命令清除缓存:
php artisan config:clear php artisan cache:clear
同时检查config/app.php中的url配置项,确保与.env的APP_URL一致,避免硬编码错误。
排查方向3:修正服务器虚拟主机配置
如果Apache/Nginx的DocumentRoot指向了项目根目录而非public文件夹,会触发双重重写逻辑。正确的Apache虚拟主机配置示例:
<VirtualHost *:443> ServerName myproject.com DocumentRoot /path/to/your/project/public <Directory /path/to/your/project/public> AllowOverride All Require all granted </Directory> # 此处添加SSL相关配置 </VirtualHost>
若能直接将DocumentRoot设为public,可直接删除根目录的.htaccess,从根源避免路径叠加。
排查方向4:检查路由生成代码
确认项目中使用route()、url()等辅助函数生成链接时,未手动添加public前缀。比如路由定义为Route::get('/mysite', ...),生成链接应使用route('mysite')或url('/mysite'),而非url('/public/mysite')。
排查方向5:清除浏览器301重定向缓存
之前的错误301重定向可能被浏览器缓存,导致手动修改URL后自动跳转。解决方式:
- 打开浏览器开发者工具(F12),在「网络」选项卡勾选「禁用缓存」后刷新测试
- 直接清除浏览器的缓存与Cookie
内容的提问来源于stack exchange,提问作者Tenarius
相关产品推荐
相关产品推荐

