2014-06-27 74 views
2

我想始終使用https並擁有一個規範域。問題是,當我與輔助域名進行https連接時,一切都會破裂,因爲證書是針對主域的。有沒有辦法解決這個問題,還是我必須購買證書,而不僅僅是規範域?如何配置規範主機名並強制https與Apache?

我 「/etc/apache2/apache2.conf中」 的有關部分

# Canonical hostname and always use https 
<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # force https on primary host (works fine) 
    # http://primary-host.com -> https://primary-host.com 
    RewriteCond %{HTTPS} off 
    RewriteCond %{HTTP_HOST} ^primary-host\.com$ 
    RewriteRule (.*) https://primary-host.com%{REQUEST_URI} 

    # force https and redirect to primary host (works fine) 
    # http://secondary-host.com -> https://primary-host.com 
    RewriteCond %{HTTPS} off 
    RewriteCond %{HTTP_HOST} ^secondary-host\.com$ 
    RewriteRule (.*) https://primary-host.com%{REQUEST_URI} 

    # FAIL: Certificate doesn't match and "Bad Request (400)" if accepted! 
    # https://secondary-host.com -> https://primary-host.com 
    RewriteCond %{HTTPS} on 
    RewriteCond %{HTTP_HOST} ^secondary-host\.com$ 
    RewriteRule (.*) https://primary-host.com%{REQUEST_URI} 

</IfModule> 

回答

0

你試過這裏描述的以下? https://httpd.apache.org/docs/2.4/rewrite/remapping.html

此規則的目標是強制使用特定主機名,而不是其他可能用於訪問同一站點的主機名。例如,如果您希望強制使用www.example.com而不是example.com,則可以使用以下配方的變體。

解決方案: 解決此問題的最佳方法根本不涉及mod_rewrite,而是使用放置在虛擬主機中的Redirect指令作爲非規範主機名。

<VirtualHost *:80> 
    ServerName undesired.example.com 
    ServerAlias example.com notthis.example.com 

    Redirect "/" "http://www.example.com/" 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.example.com 
</VirtualHost> 

或短

<If "%{HTTP_HOST} != 'www.example.com'"> 
    Redirect "/" "http://www.example.com/" 
</If>