2008-08-12 463 views
7

通過與Apache 2.2的SSL連接透明地重寫URL的最佳方式是什麼?使用mod_rewrite模擬SSL虛擬主機?

Apache 2本身不支持SSL連接的多個基於名稱的虛擬主機,我聽說mod_rewrite可以幫助解決這個問題。我願做這樣的事情:

我已經設置了服務器,以便網站可以通過

https://secure.example.com/dbadmin

進行訪問,但我想有這個作爲https://dbadmin.example.com

如何是否將其設置爲使重寫規則將dbadmin.example.com重寫爲secure.example.com/dbadmin,但不在客戶端的地址欄上顯示重寫(即,客戶端仍然會看到dbadmin.example.com) ,通過https?

回答

3

配置單個VirtualHost以同時提供secure.example.com和dbadmin.example.com(使其成爲唯一*:443 VirtualHost實現此目的)。然後,您可以使用mod_rewrite調整的URI請求dbadmin.example.com:

<VirtualHost *:443> 
    ServerName secure.example.com 
    ServerAlias dbadmin.example.com 

    RewriteEngine on 
    RewriteCond %{SERVER_NAME} dbadmin.example.com 
    RewriteRule !/dbadmin(.*)$ /dbadmin$1 
</VirtualHost> 

你的SSL證書需要兩個secure.example.com和dbadmin.example.com有效。它可以是Terry Lorber提到的通配符證書,也可以使用subjectAltName字段添加其他主機名。

如果遇到問題,請先將其設置爲<VirtualHost *>,並檢查它是否在沒有SSL的情況下正常工作。 SSL連接和證書是一個單獨的複雜層,您可以在URI重寫工作後設置它。

0

有阿帕奇mod_rewrite的,或者你可以配置Apache直接https://dbadmin.example.com到路徑/到/ example.com/dbadmin服務器

<VirtualHost *> 
ServerName subdomain.domain.com 
DocumentRoot /home/httpd/htdocs/subdomain/ 
</VirtualHost> 
2

上除非你的SSL證書是「通配符」或多站點善良,那麼我認爲這不會起作用。重寫將顯示在瀏覽器中,並且地址欄中的名稱必須對證書有效,否則用戶將看到安全錯誤(他們總是可以接受並繼續,但聽起來不像您想要的那樣)。

更多here