2015-07-19 81 views
3

我的Apache 「的httpd-vhosts.conf」看起來像這樣::Apache的虛擬主機無法正常運行

<VirtualHost *:80> 
    DocumentRoot "c:/wamp/www/" 
    ServerName localhost 
    ServerAlias *.localhost 
</VirtualHost> 

<VirtualHost laravel.dev:80> 
    DocumentRoot "c:/wamp/www/laravel/public" 
    ServerName laravel.dev 
    ServerAlias *.laravel.dev 
</VirtualHost> 

<VirtualHost learninglaravel.dev:80> 
    DocumentRoot "c:/wamp/www/learningLaravel/public" 
    ServerName learningLaravel.dev 
    ServerAlias *.learningLaravel.dev 
</VirtualHost> 

和我「...... SYSTEM32 /司機/ etc/hosts文件」也看起來像這樣::

127.0.0.1  localhost 
127.0.0.1  localhost 

// I added the following entries. The first two entries above was already there 
127.0.0.1  laravel.dev 
127.0.0.1  learninglaravel.dev 

當我進入「learningLaravel.dev」「laravel.dev」到瀏覽器中,他們的工作細如預計。但我有我的「WWW」文件夾中的其他文件夾,我用它們來學習PHP和我希望能夠從瀏覽器直接訪問這些文件夾中的文件,如說「本地主機/測試/ me.php」 。但是,只要我輸入這樣的地址,瀏覽器就會進入vhosts-conf文件中的第二項[[輸出laravel錯誤,意味着它找不到文件]]。看起來,vhosts-conf文件中的第一項不起作用,Apache繞過第二項。假設第一項是所有條目。我試圖交換第二個和第三個條目,看看它會如何表現,但它總是將瀏覽器定向到第二個條目而不是catch all(假設處理地址的第一個條目),如「localhost/test/me.php 「

每次我只輸入‘本地主機’到瀏覽器,它會直接到第二個條目,而不是說印刷的內容‘WWW’文件夾。

我該如何解決這個問題?謝謝。

+0

只安裝相同的配置爲你的,它按預期工作。 (WAMP 2.5和Windows 10機器上的Apache 2.4.9)。你使用什麼版本? – Nasreddine

+0

@Nasreddine我的WAMP是2.4,Apache是​​2.4.4。 –

+0

你把它關掉了嗎?重新啓動Apache以確保沒有應用舊的配置。正如Nasreddine所說,這個配置是正確的,並且爲我工作了一百次。 –

回答

3

看來問題來自於你使用VirtualHost指令的方式。

不建議爲虛擬主機的IP地址使用完全限定的域名。它是如何工作的誤導。基於名稱的虛擬主機通過ServerName指令確定主機,而不是通過VirtualHost指令(<VirtualHost FQDN:80>)中的FQDN確定主機。事實上,這被看作是<VirtualHost 127.0.0.1:80>

會發生什麼事是你的情況是在VirtualHost doc記錄,最後2段(只是「安全」)之前,引用:

當接收到一個請求時,服務器第一僅根據本地IP地址和端口 組合將其映射到匹配的最佳 。 非通配符有更高的優先級。如果根本不存在基於IP和端口的 ,則使用「主」服務器配置 。

如果多臺虛擬主機包含最佳匹配的IP地址和端口 ,服務器從最佳匹配基於 所請求的主機名,這些虛擬主機選擇。 如果沒有基於名稱匹配的虛擬主機是 發現,然後匹配的IP地址 第一家上市的虛擬主機將使用。因此, 給出的IP地址和端口組合的第一個列出的虛擬主機是 表示IP和端口組合的默認虛擬主機。

所以,當你問localhost/somedir,服務器將嘗試從非通配符的虛擬主機聲明找到,但不具有相應的主機名(服務器名)狼狽不堪,所以它選擇爲「默認」第一VHost與IP:端口,而不是與*:端口的第一個。

解決您的問題,嘗試在所有三個虛擬主機聲明使用<VirtualHost *:80>

<VirtualHost *:80> 
    DocumentRoot "c:/wamp/www/" 
    ServerName localhost 
    ServerAlias *.localhost 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "c:/wamp/www/laravel/public" 
    ServerName laravel.dev 
    ServerAlias *.laravel.dev 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "c:/wamp/www/learningLaravel/public" 
    ServerName learningLaravel.dev 
    ServerAlias *.learningLaravel.dev 
</VirtualHost> 

,並重新加載/重啓Apache。

(我對這個唯一的疑問是,爲什麼納斯爾丁可以做一個工作測試用例您的設置。)

+0

謝謝sooo「Zimmi」。問題現在解決了,一切都很完美。在對Virtualhost指令進行更改後,它完美無缺。非常感謝,你從幾個小時的搜索和搜索中拯救了我。 –