我仍然不太明白为什么我们必须将index.php保存在公共目录而不是根目录中。
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并修改虚拟主机文件更好,那么我们可以如何修改实时服务器中的虚拟主机文件?假设我有这个域名http://my-website.com/,我在浏览器上访问它,我首先看到的不是网页而是下面的目录,直到我点击公共目录然后我看到主页,
root/of/project
public/
index.php
.htacess
(html, image, css, etc)
我认为Zend或Symfony项目也是如此,但是无法修改实时服务器中的虚拟主机文件。我不擅长这些框架,如果我将Zend项目上传到实时服务器,我将在下面看到,
那么,如何将Zend或Symfony项目部署到您的实时服务器以立即查看您的网页?
答案 0 :(得分:6)
将项目根目录中的index.php
保留在之外是一个非常好的主意,原因很简单:
您不希望您的用户访问公共文件夹(index.php,css,js等)中的任何文件。当你将index.php放在根文件夹中时,你也可以访问composer.json
文件,例如这是一个安全风险 - 潜在的黑客会知道你使用的是什么软件包,哪个版本对他来说更容易进行攻击。
说到你的托管 - 你的根目录下应该有一个public_html
文件夹,它应该是你Symfony
应用程序的公共文件夹(web),你也应该能够保留公用文件夹之外的文件。如果你不这样做 - 你真的需要考虑改变托管合作伙伴
修改:
回答你的评论。假设您的托管中有public_html
个文件夹,并且您希望部署Symfony
应用,该应用应该可以直接在http://your-domain.com
上访问。然后你应该将整个Symfony
项目放在任何地方(但在public_html
文件夹之外),并使public_html
文件夹成为web
项目的Symfony
文件夹的符号链接。此操作相当于编辑虚拟主机并更改DocumentRoot
,我认为这是您无法做到的。
您还可以在另一个问题上查看我的answer以获得更多说明