修改 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 协议》,转载必须注明作者和本文链接
推荐文章: