2012-01-20 16 views
1

誰でもこのような条件でhttp < - > https(戻って強制します)をリダイレクトすることができますか? :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)httpsの代わりにhttpが入力された場合でも、残りのすべてのページは常にhttpsです。

以下のコードは、http://www.mydomain.comを除くすべてのURLをhttpsにリダイレクトします(およびパラメータを保持します)。すべてのページが常にhttpsをしているように、私はwww.mydomain.comを除き、(何parametresが存在しない場合)だけでなくhttpにHTTPSをリダイレクトするために、上記のコードの後に​​右下のコードを追加しようとしました

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

しかし、私は運がなかった。また、私は逃した?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?"を説明してください。最後の記号( "1")が無効になっている "home1"または "home1"を意味しますか?ありがとうございました。そして2番目の質問:[E = IS_HTTP:1]または[ENV = IS_HTTP:1]?ありがとうございました。 – Haradzieniec

+0

@Haradzieniec 'home1?'は 'home'または' home1'にマッチします。つまり '? 'は' 1'をオプションにします。 'E'または' env'が動作します。 –

+0

ありがとうございました。それは動作しますが、私はそれがこのトピックのための質問ではなく、別のものではないかどうかはわかりません...あなたのコードでは、httpsが赤で、クロムにクロスアウトされ、同様のエラーがFFで発生します。コードを削除すると、すべてが問題なく、SSL証明書が正常に表示されます。緑です。それは、コードの最初と3番目のブロックでうまく動作します(しかし、2番目のブロックはなく、 "RewriteCond%{HTTPS} on"で始まります)。理由は何でしょうか?どうもありがとうございました。 – Haradzieniec

関連する問題