2012-04-21 52 views
0

我有/var/www/html/zend_example下安裝了默認的Zend Framework應用程序。公共目錄是:/var/www/html/zend_example/public配置Zend Framework忽略其他目錄並在子目錄中工作?

我也有/var/www/html其他非Zend的部位。例如,/var/www/html/other_site

如何配置ZF站點在http://MYDOMAIN/zend_example下工作,同時允許http://MYDOMAIN/other_site工作?

這裏是我的Apache的配置文件:

<VirtualHost *:80> 
    DocumentRoot /var/www/html/zend_example/public 
    SetEnv APPLICATION_ENV "development" 
    <Directory /var/www/html/zend_example/public> 
     DirectoryIndex index.php 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

這裏是.htaccess文件中/var/www/html/zend_example/public

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

我只是想獲得一個發展ZF網站建立和運行,同時還具有其他的可用的網站(在相同的基本URL下)。

眼下,所有的請求重定向(或重寫?)到基URL(HTTP:// MYDOMAIN)。

謝謝!

編輯#1

我編輯的虛擬主機兩個zend_exampleother_site使每個DocumentRoot設置爲/var/www/html,而不是子目錄爲每個站點。這使得它可以訪問這兩個網站在各自的網址 - OTHER_SITE:http://MYDOMAIN/other_site和zend_example:http://MYDOMAIN/zend_example/public。現在,我認爲/var/www/html/zend_example/public目錄中的.htaccess文件存在問題。我無法訪問應該指向IndexController的默認「Zend」URL,如http://MYDOMAIN/zend_example/public/index/index。相反,我收到一個404錯誤。

編輯#2

如果我禁用除了zend_example一個所有虛擬主機和zend_example虛擬主機有DocumentRoot /var/www/html集,然後我能夠http://MYDOMAIN/zend_example/public下運行的Zend的網站,其中包括特定的默認Zend的路線,如http://MYDOMAIN/zend_example/public/index/index。當我啓用另一個虛擬主機時,這會中斷,但我仍然可以訪問Zend的主索引頁面http://MYDOMAIN/zend_example/public

編輯#3

我結束了這個醞釀了好幾個小時。似乎有一些獨特的配置需要完成,因爲我的服務器是centos 6.0。我最終設置了Debian 6.0服務器,並能夠正確地設置我的虛擬主機,包括Zend站點!不過,我仍然想回來解決centos問題。

+0

該設置看起來對我來說很合適。它不工作?我唯一要補充的是,如果你還沒有成爲其他站點的VHost – vascowhite 2012-04-21 07:26:40

+0

@vascowhite Zend站點正在工作,除了它只能在'http:// MYDOMAIN /'而不是'http: // MYDOMAIN/zend_example'。它還可以防止訪問諸如「http:// MYDOMAN/other_site /」之類的URL(它只是通過Zend應用程序錯誤)。 – 2012-04-21 20:28:20

+0

如果這適用於Debian而不是Centos,則問題可能在於某些文件或目錄的所有權/權限。我在嘗試設置Ubuntu時遇到過這個問題。 – RockyFord 2012-04-22 06:28:12

回答

1

你錯過了你的虛擬主機的ServerName選項。此外,您可能會遇到一些困難,如果你不允許followSymlinks在目錄申報,你可以試試:

//the ServerName is the name that would follow http:// (http://zend.example/module/controller/action) 

<VirtualHost *:80> 
    DocumentRoot /var/www/html/zend_example/public 
    ServerName zend.example 
    SetEnv APPLICATION_ENV "development" 
    <Directory /var/www/html/zend_example/public> 
     DirectoryIndex index.php 
     Options Indexes FollowSymlinks 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

我不是一個* nix的用戶,所以我不知道你是否有任何改變類似於一個Windows主機文件與否,但它可能支付調查。 (它看起來像你將不得不修改hosts文件,它應該是在/etc/hosts從您的虛擬主機添加一行127.0.0.1 zend.example其中zend.example =服務器)

附:如果需要本地主機,則可能必須爲本地主機創建一個虛擬主機(如果所有虛擬主機都在一個文件中,則爲列表中的第一個虛擬主機)。我知道我必須在Windows上這樣做。

+0

ServerName是我的一些困惑的一部分。我正在研究一個遠程服務器,我沒有連接到一個域名,所以我只是通過IP訪問它。我的理解是,如果我爲我的Zend應用程序設置本地主機虛擬主機和服務器名稱,它仍然必須通過IP(而不是服務器名稱)訪問。那有意義嗎? – 2012-04-21 16:11:15

+0

我添加了您建議的'FollowSymlinks'規則,併爲other_site創建了一個虛擬主機。我檢查了'/ etc/hosts',它已經有一個localhost行。我正在通過'httpd.conf'查看其他想法。也許有必要注意,無論哪個vhost包含在'httpd.conf'中,第一個出現在'http:// MYDOMAIN /',第二個不能被訪問。這就像'DocumentRoot'被忽略。 – 2012-04-21 20:31:27

+0

該網站很偏遠,這有一些不同。現在你需要一個合適的虛擬主機和一個處理DNS條目的方法。如果遠程位於本地網絡上,則可以使用每臺客戶端計算機上的hosts文件路由到這些站點(或者在服務器上設置一個dns服務器),如果它不在本地網絡上,那麼您正在處理dns開放的互聯網。我有任何問題試圖通過IP訪問ZF網站,有一個技巧,我不知道。 – RockyFord 2012-04-22 06:27:02