我們有一個購物網站,我們在共享主機(Mediatemple Gridserver)上託管。網站的某些部分需要使用HTTPS(結帳等),但其餘部分應使用HTTP。正確使用.htaccess在HTTP和HTTPS之間切換
有誰知道我們總是可以強制正確使用特定URL的HTTP/HTTPS嗎?我們已經在各種狀態下工作,但是我們無法獲得對應該位於HTTP上但通過HTTPS請求正確切換回的頁面的請求。
我看了一下SO,但找不到合適的答案。
我們有一個購物網站,我們在共享主機(Mediatemple Gridserver)上託管。網站的某些部分需要使用HTTPS(結帳等),但其餘部分應使用HTTP。正確使用.htaccess在HTTP和HTTPS之間切換
有誰知道我們總是可以強制正確使用特定URL的HTTP/HTTPS嗎?我們已經在各種狀態下工作,但是我們無法獲得對應該位於HTTP上但通過HTTPS請求正確切換回的頁面的請求。
我看了一下SO,但找不到合適的答案。
我用類似這樣的我的管理文件夾的東西在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。
我檢查了代碼的網站我服務器,使用上面列出的兩個塊,並且它工作正常,沒有重定向循環 – 2009-07-20 19:21:25
+1。很好的回答。我的情況需要'RewriteCond%{HTTP:X-Forwarded-SSL} on`,因爲我使用RackSpace的雲站點。 – 2011-08-15 00:19:26
我覺得應該是:
RewriteCond %{HTTPS} =on
^/checkout(.*) http://shoppingsite.com/checkout$1 [R]
見mod_rewrite文檔。
這應該工作在幾乎所有情況,並應在實際的虛擬主機或工作的.htaccess:
RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L]
(不要忘記%{REQUEST_URI}前斜線,因爲這可以使傳遞一個端口號,這是危險的)
如在this answer中所述,修復您的應用程序以在需要時使用https://
鏈接。不要依靠自動重定向,如果您還沒有將您的鏈接/表單也通過https://
轉到https://
網址,這可能會導致您錯誤的安全感。使用mod_rewrite
會自動更難以檢測到這種錯誤(這也可能是漏洞)。
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L]
我有一個問題是在一個loadballancer後面。這是我如何修復它。
對我來說,這工作(我用它的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
爲好,但沒有成功。
是否必須與htaccess的?是什麼語言使用? – random 2009-07-15 02:33:04
你想防止與HTTPS? – 2012-01-19 18:34:56