修改 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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2
Flex

虚拟主机你还是别折腾了 实在缺钱整台学生vps呗 一年一百来块

5年前 评论
ThinkQ

:+1:

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!