簡體   English   中英

為什么我們應該將index.php保存在公用文件夾而不是根目錄中?

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

我仍然不太明白為什么我們必須將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,就像教程一樣。 通過修改虛擬主機文件的麻煩,實際的好處是什么?

為什么我們不應該做這個,而不是下方,而無需修改虛擬主機文件? 是安全隱患還是什么?

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項目部署到實時服務器以立即查看您的網頁?

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文件夾成為你的Symfony項目的web文件夾的符號鏈接。 此操作相當於編輯虛擬主機和更改DocumentRoot ,我認為這是您無法做到的。

您還可以在另一個問題上查看我的答案 ,以獲得更多說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM