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

Laravel带后缀斜杠URL错误重定向至public路径求助

解决Laravel带后缀斜杠URL重定向到public目录的问题

这个问题的核心是根目录和public目录的.htaccess规则执行顺序导致的路径混淆。当你访问带斜杠的http://localhost/admin/page/时,请求先被根目录的规则转发到public/admin/page/,随后public目录的斜杠重定向规则用绝对路径/$1处理,导致重定向到服务器根目录下的/public/admin/page,而不是你期望的项目根路径下的/admin/page。

解决方案:调整根目录的.htaccess规则顺序

我们需要先处理尾随斜杠的重定向,再将请求转发到public目录,这样就能避免public路径暴露在URL中。修改根目录下的.htaccess为:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # 重定向非目录的尾随斜杠请求到无斜杠版本
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # 将所有请求转发到public目录
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

为什么这样有效?

  1. 当访问http://localhost/admin/page/时,根目录的规则会先判断这不是一个实际存在的目录(!-d),然后将其重定向到http://localhost/admin/page
  2. 重定向后的无斜杠请求再被转发到public/admin/page,此时public目录的规则会正常处理Laravel的路由,不会再触发斜杠重定向
  3. 最终用户看到的URL始终是干净的http://localhost/admin/page

注意事项

  • 如果你之前测试过301重定向,浏览器可能会缓存旧的重定向规则,测试时可以使用隐私模式或者清除浏览器缓存
  • 如果你需要保留public目录内的斜杠重定向逻辑,也可以将public目录中的重定向规则改为相对路径(把/$1改成$1),但根目录先处理的方案更简洁统一

内容的提问来源于stack exchange,提问作者Simone Giusti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:36:23