为什么我们应该将 index.php 保留在 public 文件夹中而不是根目录中?

Why should we keep index.php in the public folder instead of in the root?

我仍然不太明白为什么我们必须将 index.php 保存在 public 目录而不是根目录中。

root/of/project
    public/
       index.php
       .htacess
       (html, image, css, etc)

然后,在我们的虚拟主机文件中写入以下内容:

DocumentRoot /path/to/myapp/app/public
<Directory "/path/to/myapp/app/public">
  # other setting here
</Directory>

.htaccess 文件然后将所有不存在的 URL 重定向到 index.php:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

我注意到大多数框架都是这样做的,例如 Symfony 和 Zend,就像 this 教程一样。麻烦修改虚拟主机文件,真正的好处是什么?

为什么我们不应该在下面 而不是 修改虚拟主机文件呢?是安全风险还是什么?

root/of/project    
    index.php
    .htacess
    public/ 
       (html, image, css, etc)

如果保留index.php并修改虚拟主机文件更好,如何我们可以在live server[=]中修改虚拟主机文件 然后呢?假设我有这个域名,http://my-website.com/,我在浏览器上访问它,我首先看到的不是网页,而是下面的目录,直到我单击 public 目录,然后我看到主页,

root/of/project
    public/
       index.php
       .htacess
       (html, image, css, etc)

我假设这对于 Zend 或 Symfony 项目也是一样的,但无法修改实时服务器中的虚拟主机文件。我不擅长这些框架,如果我将我的 Zend 项目上传到实时服务器,我会在下面看到这个,

那么,您如何将您的 Zend 或 Symfony 项目部署 到您的实时服务器以立即查看您的网页?

index.php 放在项目根目录之外 是一个非常好的主意,原因很简单:

您不希望您的用户访问 public 文件夹中的文件以外的任何文件(index.php、css、js 等)。当你将 index.php 放在根文件夹中时,你还可以访问 composer.json 文件,例如这是一个安全风险 - 潜在的黑客会知道你使用的是什么包,在哪个版本中,所以它更容易让他进行攻击。

关于您的托管 - 您的根目录中应该有一些 public_html 文件夹,这意味着您的 Symfony 应用程序的 public 文件夹 (web) 和您还应该能够将文件保存在 public 文件夹之外。如果你不这样做 - 你真的需要考虑更换托管合作伙伴

编辑: 回答你的评论。假设您的主机上有 public_html 文件夹,并且您想要部署 Symfony 应用程序,该应用程序应该可以直接在 http://your-domain.com 上访问。然后你应该将整个 Symfony 项目放在任何地方(但在 public_html 文件夹之外)并使 public_html 文件夹成为你 [=] 的 link 到 web 的符号文件夹13=] 项目。此操作相当于编辑虚拟主机并更改 DocumentRoot,我认为您无法执行此操作。

您还可以查看我的 另一个问题以获得更多说明