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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:42:13