2017-04-05 53 views
0

我訪問我的網站的子文件夾,並得到這個錯誤預期的目錄位置:

PHP Warning: include_once(): Failed opening '/var/www/html//include/version.inc' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /srv/sparrow/php/include/branches.inc on line 3 

似乎$ _ SERVER [「DOCUMENT_ROOT」]返回一個錯誤的目錄是這樣的:

/var/www/html/ 

如果我訪問www.my.website/php,這應該是預期的目錄中$ _ SERVER [「DOCUMENT_ROOT」]應該返回:

/var/www/html/php/ 

這是我的虛擬主機配置:

NameVirtualHost *:80 

<VirtualHost *:80> 
    ServerName www.mywebsite.com 
    DocumentRoot /var/www/html/ 

    <Directory /var/www/html/> 
    Options -Indexes -MultiViews 
    </Directory> 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.mywebsite.com/ph 
    # Webroot of PHP site 
    DocumentRoot /var/www/html/php/ 

    <Directory /var/www/html/php/> 
    Options -Indexes -MultiViews 
    </Directory> 
</VirtualHost> 

我如何配置我的虛擬主機配置,例如,如果我訪問www.my.website/php它應該值返回的DocumentRoot/var/www/html/php /?

謝謝你們!

+0

文檔根有__fixed__值。您應將網站上的任何路徑追加到文檔根目錄__manually__ –

+0

Thanks @u_mulder。 :) – Michael

回答

1

您在端口80上有兩個虛擬主機。第一場勝利。您應該通過IP,服務器名稱或端口來區分它們。如果兩者都運行在相同的端口上,那麼如果您使用的是Apache 2.2(不需要2.4),則還需要NameVirtualHost 80

我敢肯定,如果你交換的虛擬主機,你會得到/var/www/html/php/$_SERVER['DOCUMENT_ROOT']

但還是: 如果你有兩個虛擬主機,讓他們區分!


更新

其他重寫(需要mod_rewrite被激活)在上的虛擬主機,這樣就可以把第二個虛擬主機:如果你想隱藏

RewriteEngine On 
RewriteRule ^/ph/(.*)$ http://www.mywebsite.com/ph/$1 [R=301,L] 

[P,L]您正在重寫,但[P]要求mod_proxy也要被激活。

+0

嗨@你好Fishy,謝謝你回答我的問題。我爲每個虛擬主機添加了servername來區分它們,它不起作用。我遵循這個NameVirtualHost的文檔。 https://httpd.apache.org/docs/2.2/vhosts/name-based.html – Michael

+0

'www.mywebsite.com/ph'不是服務器名稱:('/ ph'是URI和'www.mywebsite。 com'是一個服務器名...所以兩個虛擬主機仍然聽相同的端口和名稱 - >不能工作...任何一個應該有另一個端口或另一個名稱。順便說一句,你真的需要兩個虛擬主機? –

+0

是的,我真的需要它們,如果我訪問www.mywebsitemcom/ph,它應該使用第二個虛擬主機,如果沒有,那麼將會發生錯誤,因爲文檔不正確,謝謝你好,Fishy爲你提供幫助 – Michael