修改 Laravel 的默认 public 路径
想看解决办法的直接看最后,以下为流水账(
最近遇到个坑,就是自己写着玩的项目上传到虚拟共享主机做测试,blade 模板使用了 mix() 来加载 CSS 及 JS 结果开首页就报错,提示 mix-manifest.json 无法找到,因为我这台虚拟共享主机写死的 HTML 根目录为 domains/my_domian/public_html,于是抱着尽量少折腾的心态,猜测 mix() 读取的是 app/public 目录,也没多想直接把 mix() 改成了 asset() 。
行了,这回可以正常打开首页了。于是乎打开后台(使用 tcg/voyager 扩展),提示没有软链接,要求创建,点击创建以后又报错提示:symlink(): No such file or directory 。我想还是找个一劳永逸的方法吧。
于是乎上 tcg/voyager 项目主页看有没有相似 issue ,浏览完了相似情况的解决方法,在我虚拟共享主机上都不适用,但是我看到一个关键,就是 symlink() 这个函数,创建软链接的时候,先调用 public_path() 获取 public 的目录,看来找到了关键,只要查找 public_path() 方法的默认返回值,应该就能修改 public 目录默认路径了,于是用 sublime text 发起在文件中所搜,找到了挤出调用,并定位到了定义文件在 Illuminate\Foundation\helpers.php ,然而并不是源头,只有一句 app()->make('path.public') (后面字符串拼接省略),再次在全文件中搜索 path.public ,定位到 Illuminate\Foundation\Application.php 中的
protected function bindPathsInContainer()
{
...
$this->instance('path.public', $this->publicPath());
...
}
原来最终的源头是 Illuminate\Foundation\Application.php 下的 publicPath() ,public 目录就是在这里拼接的:$this->basePath.DIRECTORY_SEPARATOR.'public';,把 'public' 改成 'public_html' 即可。当然最一劳永逸的方法就是购买一台 vps (#贫穷的流泪熊猫头)
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: