那麼這裏是我對一個網站的回答,我希望所有的交通指向https://example.com
。 (如果你想https://www.example.com
,你可以做出一些調整)
首先,在/sites/default/settings.php Drupal的settings.php配置文件:
在這個文件我有以下幾點:
$base_url = '//example.com';
$conf['reverse_proxy'] = TRUE;
$conf['reverse_proxy_addresses'] = array('name-of-my-loadbalancer.us-west-2.elb.amazonaws.com');
$conf['reverse_proxy_header'] = 'HTTP_X_CLUSTER_CLIENT_IP';
說實話,我不知道上述「reverse_proxy」設置是否真的有必要。事實上,我禁用了它們,它似乎沒有影響任何東西,所以它可能不會。重要的部分是確保你的settings.php文件中有$base_url = '//example.com';
。
下一部分是配置您的.htaccess文件。這是很重要的位:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !=/healthy.html
RewriteRule^https://example\.com%{REQUEST_URI} [L,R=301]
對於像我這樣的小白,這是艱難的,首先要弄清楚,但這裏的崩潰:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
這看起來在 協議發送由負載均衡器。如果該協議不是https https,請啓動RewriteRule。
RewriteCond %{HTTPS} off
如果流量爲首不是HTTPS網站,開始重寫規則
RewriteCond %{REQUEST_URI} !=/healthy.html
這是一個重要的一點。我有一個簡單的healthy.html文件,其中包含單詞「Success!」。在我的Apache主drupal webroot目錄中。當ELB訪問healthy.html文件時,它將繞過我們的重寫規則。如果沒有ELB健康檢查失敗,請將我們的服務器脫機。
RewriteRule^https://example\.com%{REQUEST_URI} [L,R=301]
這是實際的重寫規則。如果上述所有條件都通過,則會將傳入的URL重寫爲https://example.com/whatever
。順便說一下,L代表「最後」,如「這是該組的最後一條規則」,「R = 301」代表「301重定向」。
唯一的一次,這並不做一個適當的重定向是,如果我手動輸入https://www.example.com
(與在開始HTTPS)。我想我可以用另一個簡單的RewriteCond來解決這個問題。
這似乎不是一個問題。此外,你發佈的問題已被問及在這裏多次回答,就像這裏:http://stackoverflow.com/questions/17174626/elb-and-apache-configuration-for-https-website –
我' m投票結束這個問題作爲題外話,因爲這不是一個問題。 –
對不起 - 正在寫答案。我嘗試過的其他方法都無法正常工作,或者至少沒有詳細解釋以幫助我。由於使用了RewriteRule,您發佈的內容被嘗試並導致無限重定向。我可以通過手動輸入域名來實現它的唯一方法。 – tbox