为什么我们应该将 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
,我认为您无法执行此操作。
您还可以查看我的 另一个问题以获得更多说明
我仍然不太明白为什么我们必须将 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
,我认为您无法执行此操作。
您还可以查看我的