2012-01-20 39 views
1

任何人都可以幫助我編寫重寫代碼,重定向http < - > https(返回並強制取決於URL類型)與這些條件:htaccess rewriterule:根據URL類型將http重定向到https或https到http(兩種方式)

1)http://www.mydomain.com , http://www.mydomain.com/?p=home , http://www.mydomain.com/?p=home1 , http://www.mydomain.com/?qqq=home始終是http,即使https是鍵入而不是http。

2)即使輸入的是http而不是https,其餘所有頁面始終爲https。

以下代碼將除http://www.mydomain.com之外的所有網址(並保留參數)重定向到https。

#redirects http to https if there are parameters 
RewriteCond %{HTTPS} off 
RewriteCond %{QUERY_STRING} !^$ 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

我試過的代碼之後添加下面的代碼正上方重定向HTTPS訪問http以及(如果沒有參數應用),這樣所有的頁面總是HTTPS,除了www.mydomain.com ,但我沒有運氣。我也錯過了?p = home,?p = home1,?qqq = home - 我不知道如何添加它們。

RewriteCond %{HTTP} off 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

回答

5

嘗試將以下內容添加到您網站根目錄下的htaccess文件中。

RewriteEngine on 
RewriteBase/

#determine if page is supposed to be http 
#if it has p=home or p=home1 or qqq=home in querystring 
RewriteCond %{QUERY_STRING} (^|&)(p=home1?|qqq=home)(&|$) [NC,OR] 
#or if query string is empty 
RewriteCond %{QUERY_STRING} ^$ 
#set env var to 1 
RewriteRule^- [E=IS_HTTP:1] 


#all pages that are supposed to be http redirected if https 
RewriteCond %{HTTPS} on 
RewriteCond %{ENV:IS_HTTP} 1 
RewriteRule^http://%{HTTP_HOST}%{REQUEST_URI} [R,L=301] 

#all other pages are sent to https if not already so 
RewriteCond %{HTTPS} off 
RewriteCond %{ENV:IS_HTTP} !1 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R,L=301] 
+0

哇......看起來像我理解原理,但我永遠不會從頭開始寫我自己的。人們怎麼能在一年內少回答我的問題?.. :)另一個問題是:你能解釋一下「家1?」。是否意味着最後一個符號(「1」)無效的「home1」或「home1」?謝謝。第二個問題:[E = IS_HTTP:1]或[ENV = IS_HTTP:1]?謝謝。 – Haradzieniec

+0

@Haradzieniec'home1?'與'home'或'home1'匹配,即'?'使'1'可選。 'E'或'env'將起作用。 –

+0

非常感謝。它的工作原理,但....我不知道這是一個問題,而不是另一個...使用你的代碼,HTTPS是紅色的,在Chrome中劃掉,類似的錯誤發生在FF。一旦我刪除了你的代碼,一切正常,SSL證書顯示正常 - 它是綠色的。它甚至可以在代碼的第一個和第三個塊(但沒有第二個塊,以「RewriteCond%{HTTPS} on」開頭)上正常工作。可能是什麼原因?非常感謝你。 – Haradzieniec