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
相关产品推荐
相关产品推荐

