Laravel:更改框架/应用程序文件夹位置的支持方式是什么?

3

我刚开始接触 Laravel,并注意到文档中建议将应用文件移动到文档根目录之外,只有 /public 目录中的内容可以被访问。好的,我已经做到了。然而,在查看 /public/index.php 文件时,它被硬编码指向上一级目录的 /bootstrap 目录。由于我已将框架代码移动到其他位置,因此我稍微修改了文件如下:

$app_path = $_SERVER['DOCUMENT_ROOT'].'/../securefiles/myApp/';
...
require $app_path.'/bootstrap/autoload.php';
... etc ...

这是预期的做法吗?在Laravel加载之前,需要正确设置此文件,因此我不认为可以配置Laravel本身以了解它相对于/public/index.php存储的位置。但是我很好奇是否还有其他、更好的、更合适的方法?

1个回答

4

不,那不是他们的意思。他们的意思是你需要将虚拟主机指向使用 public 作为 DOCUMENT_ROOT,而保留其余结构不变。所以你会看到类似这样的东西:

projectname/
  app/
  bootstrap/
  public/

然后,Apache/Nginx/Lighttpd虚拟主机配置会将DOCUMENT_ROOT设置为/path/to/projectname/public。因此,除了更改服务器配置之外,实际上不需要做任何事情。这通常是如何完成的。以下是Apache示例:

<VirtualHost *:80>
    DocumentRoot "/path/to/projectname/public"
    ServerName yoursite.com
    ServerAlias www.yoursite.com
</VirtualHost>

1
标记为正确,因为它回答了其他可能处于类似情况的人的问题。然而,我有数十个应用程序 - 每个应用程序都在自己的子目录中,因此为每个应用程序创建一个虚拟主机是不切实际的。由于我的情况在文档中没有明确描述或考虑到,所以我可以假设没有真正的官方方法来做我想做的事情吗? - Quasipickle
@Pickle:我为每个应用程序创建虚拟主机,这样它们就是自包含的。如果它们正在运行相同的域或其他什么东西,则它们应该是单个应用程序中的模块。如果您想共享相同的框架基础,则可以使用包含路径或类似的东西。此外,我认为您所做的技术上应该是可行的,只是设置方式不太常见。 - prodigitalson
你好@prodigitalson,我们如何在共享主机上实现这一点,因为您无法访问Apache配置。由于我正在开发的应用程序将托管在共享主机上,因此有什么解决方法可以隐藏代码以防止公众访问。我已经在网上搜索了很久,但没有找到任何适当的方法来实现这一点。 - Devendra Verma
任何主机都应该让您访问 Web 根目录外的文件系统。此时,只需要找出按照惯例哪个文件夹是 Web 根目录,然后您就可以通过 SSH 登录服务器,并将您的“public”文件夹创建符号链接到托管公司指定的名称。如果您的托管公司(即使是共享托管)不提供 SSH 访问权限,则不应使用他们,因为有很多其他可供选择的选项。 - prodigitalson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接