2009-07-10 61 views
19

我們有一個購物網站,我們在共享主機(Mediatemple Gridserver)上託管。網站的某些部分需要使用HTTPS(結帳等),但其餘部分應使用HTTP。正確使用.htaccess在HTTP和HTTPS之間切換

有誰知道我們總是可以強制正確使用特定URL的HTTP/HTTPS嗎?我們已經在各種狀態下工作,但是我們無法獲得對應該位於HTTP上但通過HTTPS請求正確切換回的頁面的請求。

我看了一下SO,但找不到合適的答案。

+0

是否必須與htaccess的?是什麼語言使用? – random 2009-07-15 02:33:04

+0

你想防止與HTTPS? – 2012-01-19 18:34:56

回答

33

我用類似這樣的我的管理文件夾的東西在WordPress:

#redirect all https traffic to http, unless it is pointed at /checkout 
RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^/checkout/?.*$ 
RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L] 

RewriteCond %{HTTPS} on部分可能不適用於所有的Web服務器上運行。例如,我的虛擬主機需要RewriteCond %{HTTP:X-Forwarded-SSL} on

如果要強制相反,嘗試:

#redirect all http traffic to https, if it is pointed at /checkout 
RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} ^/checkout/?.*$ 
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L] 

如果你想一些替代的方法來做到這一點,看看askapache

+0

我檢查了代碼的網站我服務器,使用上面列出的兩個塊,並且它工作正常,沒有重定向循環 – 2009-07-20 19:21:25

+0

+1。很好的回答。我的情況需要'RewriteCond%{HTTP:X-Forwarded-SSL} on`,因爲我使用RackSpace的雲站點。 – 2011-08-15 00:19:26

0

我覺得應該是:

RewriteCond %{HTTPS} =on 
^/checkout(.*) http://shoppingsite.com/checkout$1 [R] 

mod_rewrite文檔。

13

這應該工作在幾乎所有情況,並應在實際的虛擬主機或工作的.htaccess:

RewriteEngine on 
RewriteCond %{SERVER_PORT} ^80$ 
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L] 

(不要忘記%{REQUEST_URI}前斜線,因爲這可以使傳遞一個端口號,這是危險的)

1

如在this answer中所述,修復您的應用程序以在需要時使用https://鏈接。不要依靠自動重定向,如果您還沒有將您的鏈接/表單也通過https://轉到https://網址,這可能會導致您錯誤的安全感。使用mod_rewrite會自動更難以檢測到這種錯誤(這也可能是漏洞)。

5
RewriteEngine on 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L] 

我有一個問題是在一個loadballancer後面。這是我如何修復它。

1

對我來說,這工作(我用它的WordPress站點和重定向到HTTPS)。你必須的條件和規則行添加僅次於RewriteEngine敘述和RewriteBase線:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

# I added these two lines for redirect to HTTPS 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [R=301,L] 
# (end of custom modifications) 

RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
# END WordPress` 

看一看調理RewriteCond %{HTTP:X-Forwarded-Proto} !https - 只有這個工作對我的服務器託管。 (我試過RewriteCond %{SERVER_PORT} !^443$RewriteCond %{HTTPS} off爲好,但沒有成功。