2015-07-12 144 views
0

我正在修復服務器上的我的Apache(2.4.12)配置文件,該服務器提供三個不同的域名。我爲每個站點有不同的配置文件。我不能爲我的生活弄清楚如何完成以下兩項:將所有請求重定向到HTTPS並將www重定向到非www

  1. 重定向所有http請求https,保持請求(子域/主機和文件路徑)的所有其餘完全一樣
  2. 重定向所有www請求非www

我讀過,這可以在一個步驟中完成,如果我只有一個*:80虛擬主機,把重寫規則出現(在我的子域的其餘部分都*:443 VirtualHosts除了www),但我不知道如何去做。在SO這些答案沒有工作:

  • this question接受的答案是不正確的(僅做了https重定向)
  • This answer不爲我工作 - 只有https重定向作品。
  • This question不處理通配符子域,因此不適用。
  • This question也不適用,因爲它不處理子域。

編輯:這是我在下面mike.k's answer的評論引用代碼。

<VirtualHost *:80> 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} www.example.com 
    RewriteRule ^(.*)$ https://example.com/$1 [R=permanent,L] 

    RewriteCond %{HTTPS} off 
    RewriteRule (.*) https://example.com%{REQUEST_URI} 
</VirtualHost> 

回答

1

這是從我的生產系統和工作。

THE_HOSTNAME是例如server,然後THE_FQHNserver.domain.edu,這有助於爲SSL證書,如果你不希望支持通配符和多個域名。

# redirect to FQHN 
RewriteEngine on 
RewriteCond %{HTTP_HOST} THE_HOSTNAME$ 
RewriteRule ^(.*)$ https://THE_FQHN/ $1 [R=permanent,L] 

# redirect to HTTPS 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://THE_FQHN%{REQUEST_URI} 

在你的情況www.domain.com將其中THE_HOSTNAME是,和THE_FQHNdomain.com,只是圍繞

+0

看來,'在你的代碼的4行$ 1'不應之前有一個空間翻轉(我收到一個語法錯誤)。我現在正在測試,我會告訴你,如果它在刪除該空間時起作用。 – vaindil

+0

不幸的是,它不起作用。我用你的代碼完全按照你的代碼(根據我以前的評論固定的「$ 1」),但是使用我的主機名信息。 'https'重定向工作正常,但'www'未被刪除。我將確切的設置添加到OP中,以便您可以看到它。 – vaindil

+0

你對這個空間是正確的,我在粗心大意的打字中引入了它。把'$'放在你的Edit中'www.example.com'的末尾,所以'RewriteCond%{HTTP_HOST} www.example.com $' –

相關問題