Laravel 5.6 public目录下manager子目录路由访问异常求助
解决Laravel子目录下深层路由404问题
嘿,这个问题我之前也碰到过,核心原因是你复制到/public/manager下的index.php和.htaccess还在沿用根目录的配置,没有适配子目录的路径,导致Laravel无法正确解析深层路由。不用给每个路由建目录,只要修改这两个文件就行,具体步骤如下:
1. 修改 /public/manager/index.php
打开这个文件,调整两个关键路径:
- 首先,把加载Laravel核心文件的路径从根目录适配到子目录:
// 原来的代码 require __DIR__.'/../bootstrap/app.php'; // 修改为(往上多退一级到项目根目录) require __DIR__.'/../../bootstrap/app.php'; - 然后,在
$app = require_once...这行代码后面,添加一行代码指定当前子目录为Laravel的public路径:$app = require_once __DIR__.'/../../bootstrap/app.php'; // 新增这行 $app->bind('path.public', function() { return __DIR__; });
这一步是让Laravel知道现在的public根目录是/public/manager,而不是原来的/public。
2. 修改 /public/manager/.htaccess
找到文件里的RewriteBase配置,把它从根目录改成你的子目录路径:
// 原来的代码 RewriteBase / // 修改为 RewriteBase /manager/
这会让Apache的重写规则基于/manager/这个前缀来处理请求,所有/manager/*的请求都会转发到/manager/index.php,由Laravel路由来解析,而不是Apache去查找静态目录。
验证效果
改完这两个文件后,你不用再创建list或者其他子目录,直接访问/manager/list就能正常触发你定义的路由了。
本质上,我们是让Laravel在子目录下重新“扎根”,通过调整核心文件路径和重写规则,让所有子目录下的请求都通过Laravel的路由系统处理,而不是依赖静态文件目录结构。
内容的提问来源于stack exchange,提问作者bradley546994
相关产品推荐
相关产品推荐

