2016-01-18 110 views
0

我正在使用Amazon Ec2,並且我已經整合了2個站點,並且需要爲我的舊站點設置不同的重定向規則。但是當我嘗試與下面的配置相同時,Web服務器始終使用第一個虛擬主機條目(site1.com),而不使用第二個虛擬主機條目(site2.com)。 你能檢查我是否缺少任何東西。apache 2.4基於名稱的虛擬主機不能正常工作

請參閱下面我的配置。

的httpd.conf:

Listen 0.0.0.0:80 
Listen 0.0.0.0:443 
Include conf/extra/httpd-vhosts-all.conf 

的httpd的虛擬主機,all.conf:

<VirtualHost *:80> 
ServerName site1.com 
ServerAlias site1.com 
DocumentRoot "/websites/site1" 
<Directory /websites/site1 > 
Require all granted 
Options Indexes FollowSymLinks Includes ExecCGI 
AllowOverride All 
    </Directory>  
RewriteEngine On 
RewriteRule  ^/page1$ page2.html 
</VirtualHost> 
<VirtualHost *:80> 
ServerName site2.com 
ServerAlias site2.com  
DocumentRoot "/websites/site2" 
<Directory /websites/site2 > 
    Require all granted 
     Options Indexes FollowSymLinks Includes ExecCGI 
    AllowOverride All 
</Directory> 
RewriteEngine On 
RewriteRule  ^/page3$ page4.html 
</VirtualHost> 

感謝 溼婆

+0

當你訪問http://site2.com/page3時附加了什麼? – ben75

+0

什麼是您正在測試的逐字URL?你有沒有淘汰瀏覽器緩存? – covener

+0

如果我使用site2.com/page3,它將進入404頁面。但是,如果我在第一個虛擬主機中放置相同的page3 url,那麼它工作的很好。基本上我可以有我的重定向規則只適用於site1.com(這是第一個虛擬主機) – Siva

回答

0
  1. 肯定會嘗試清除瀏覽器緩存中提到covener。 ..如果你還沒有。
  2. 確保您可以成功地達到預期的重寫目標?

http://site2.com/page4.html

  • 如果沒有那些揭示問題,我可以添加%v和%(東道國)到活動的LogFormat確認收到的主機頭值以及Apache正在使用哪個ServerName。例如:
  • 的LogFormat 「%H%升%U%T \」 %r \ 「%>取值%B HOST =%{主機}我SERVERNAME =%V

    +0

    請參閱下面我的意見。 1)我已經清除了瀏覽器的緩存,並沒有幫助。 2)個人目標也很好。 3)apachectl -S列出2個虛擬主機。 4)對不起,雖然我添加了LogFormat,但在我的error_log文件中沒有看到任何更改。另外,當我嘗試將site2虛擬主機添加爲第一項時,/ page3開始工作並且/ page1停止工作。所以不知何故,它總是在httpd-vhost-all.conf文件中獲取第一個虛擬主機條目。 – Siva

    +0

    1)Apache 2.4應該自動啓用基於名稱的VHOSTING,但肯定不會傷害手動啓用它作爲測試...即在Vhosts之外添加以下行: NameVirtualHost *:80 2)不確定在客戶端和服務器之間是否有任何東西,但可能要確保主機名在到達服務器之前不會轉換/翻譯主機名。這就是爲什麼我建議將%{host}我添加到LogFormat。這將顯示請求到達服務器時的主機名。並且爲了澄清,LogFormat是針對access_log的。 –

    +0

    :1)我已經嘗試添加NameVirutalhost *:80並仍然有相同的問題。 2)也請看下面的輸出日誌。下面一個用於Site2.com仍然作爲site1.com XX.XX- - [19/Jan/2016:13:37:31 -0500]「GET/page3 HTTP/1.1」404 65854 HOST = site。 com ServerName = site1.com XX.XX- - [19/Jan/2016:13:37:32 -0500]「GET/HTTP/1.1」200 65 HOST = site.com ServerName = site1.com XX.XX - - [19/Jan/2016:13:37:32 -0500]「GET/HTTP/1.1」304 - HOST = site.com ServerName = site1.com XX.XX.X.XX - - [19/Jan/2016:13:37:33 -0500]「GET/HTTP/1.1」200 65 HOST = site.com ServerName = site1.com – Siva

    0

    第一如果沒有其他主機匹配,則默認使用vhost。

    所以你需要弄清楚爲什麼你不匹配第二臺主機。

    您是否正在使用www.site2.com?這將無法匹配第二個虛擬主機(這是隻爲site2.com沒有www設置)。我也不明白你爲什麼在ServerName和ServerAlias中設置了相同的值?通常在第一個設置首選ServerName,在第二個設置任何別名(包括www版本)。

    所以不是:

    ServerName site1.com 
    ServerAlias site1.com 
    

    你通常會做:

    ServerName site1.com 
    ServerAlias www.site1.com 
    

    您也可以使用以下命令獲取當前配置的虛擬主機列表:

    apachectl -S 
    

    其他比所有我能建議的是尋找錯別字,確保Apache重啓正常(但似乎因爲你可以在第一次把3→4重定向的時候使它工作),確保主機正在被適配到Apache。如果Apache位於代理之後),並且根據Brandon的建議並檢查日誌文件是否存在錯誤,該網頁將存在於site2上。