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

Laravel 10子项目移除URL中public路径的问题求助

解决Laravel多项目部署去掉URL中public路径的问题

你当前的.htaccess规则存在两个核心问题:重复开启RewriteEngine导致规则冲突,且请求路径的判断和重写目标有误,才会出现404。按以下步骤修改即可解决:

1. 替换cms根目录下的.htaccess规则

删掉你现在的所有规则,替换成下面的内容:

RewriteEngine On
RewriteBase /cms/

# 排除public目录本身的访问
RewriteCond %{REQUEST_URI} !^public/
# 跳过实际存在的文件和目录(比如图片、静态资源)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 将请求重定向到public目录处理
RewriteRule ^(.*)$ public/$1 [L]

规则说明:

  • RewriteBase /cms/ 明确当前规则基于/cms/目录,避免跨项目路径混乱
  • 三条RewriteCond确保只有非public目录、且不是实际存在的文件/目录的请求,才会被重写到public下,既保留静态资源的直接访问,又让Laravel路由正常工作

2. 调整Laravel配置确保链接生成正确

  • 打开cms项目的.env文件,设置APP_URL=https://你的域名/cms,这样Laravel生成的路由链接(比如登录页)会自动带上/cms前缀,不会出现路径错误
  • 如果之前没生成storage软链接,在cms项目根目录执行命令:php artisan storage:link,确保/cms/public/storage指向/cms/storage/app/public,这样访问/cms/storage/xxx会正确映射到资源文件

3. 保留public目录内的.htaccess

不要删除cms项目public/目录下默认的Laravel.htaccess文件,它负责处理Laravel的路由重写,是正常访问路由的关键

完成以上步骤后,访问domain.com/cms/login就会正常跳转到登录页,domain.com/cms/storage/xxx也能正确访问资源文件,且URL中不会出现public路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:03:16