2

我目前正在開發使用MVC技術的PHP應用程序。我開始時沒有考慮一個有用的目錄結構。
我打算現在將應用程序部署到服務器的Apache2。這就是它現在的樣子。
My current layout結構的MVC PHP應用程序

我在服務器上有一個httpdocs文件夾,可以從網絡訪問。如果我將所有文件複製到此目錄中,則某些文件可能不可訪問。 public文件夾包含必須可訪問的文件。 (我可能需要把我的index.php那裏)

我的問題是:什麼是此類應用的首選佈局?我應該將除public之外的所有文件夾放在httpdocs的父文件夾中嗎?

感謝您的建議!

回答

2

http://httpd.apache.org/docs/2.1/vhosts/examples.html

你可以去看看那裏。建立一個虛擬主機總是很好,所以你不要混淆你的應用程序。而且你只需訪問公用文件夾。

<VirtualHost *:80> 
DocumentRoot /var/www/mvc_app/public 
ServerName www.example.com 

<Directory /var/www/mvc_app/public> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride None 
    Order allow,deny 
    allow from all 
</Directory> 

</VirtualHost> 
1

使用公共目錄作爲httpdocs。 Web根指向這樣的公衆:

<VirtualHost *:80> 
DocumentRoot /path/to/public 
ServerName www.domain.com 
... 
</VirtualHost> 

如果你不能訪問apache配置,你可以使用「httpdocs」作爲公共目錄。將所有內容從public移動到httpdocs,並將應用程序的其餘部分保留在httpdocs之外。只要您知道資產的路徑(「mydomain.com/javascripts/foo.js」),公用目錄的名稱就不應該存在。

2

最簡單的解決辦法是類似於CakePHP會,並讓您index.phppublic目錄,然後只需要.htaccess文件映射到index.php文件的所有請求。

因此,在你的根目錄下,你會碰到這樣的:

RewriteEngine on 
RewriteRule ^(.+) /public/index.php/$1 [L,NC] 

然後同樣在public目錄:

RewriteEngine on 
RewriteRule ^(.+) index.php/$1 [L,NC] 

你的PHP腳本會之後,還可以訪問其他腳本,正常,因爲他們在文件系統上工作,而不是通過HTTP。