2011-07-07 13 views
1

セキュリティで保護されていないページをセキュアなものにリダイレクトしようとするmod_rewriteで苦労しています。これは動作します:mod_rewriteセキュアリダイレクト

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} (help/returns) 
RewriteRule .? https://mysite.localhost/%1/ [R=301,L] 

しかし、これはしません:

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{HTTP:Host} (mysite.localhost|mylivesite.com) 
RewriteCond %{REQUEST_URI} (help/returns) 
RewriteRule .? https://%1/%2/ [R=301,L] 

それは私を与えるためにしようとするURLは、私はHTTPを得るように見えることはできませんhttps://help/returns//

です:最終にホストRewriteRule行。

私はローカルの開発とライブ展開で同じファイルを使用できるように、そこにホストが必要です。

入力に最も感謝します。

答えて

0

あなたはこのルールを使用することができます。このルールは、セキュア(HTTPS)の場所にhttp://example.com/help/returnsへのすべての要求をリダイレクトします

RewriteCond %{HTTPS} =off 
RewriteRule ^help/returns https://%{HTTP_HOST}%{REQUEST_URI} [QSA,R=301,L] 
  1. を:https://example.com/help/returns - それは完全なURLパス+クエリ文字列を保持します。条件が多すぎると、ルールが複雑になり、サーバーが本当に忙しいとき(正規表現が高価な場合)はうまくいかない。

  2. 私は%{SERVER_PORT} 80をより適切な%{HTTPS} =offに置き換えました(これは、サイトがデフォルト以外のポート、つまり80である場合に特に便利です)。

  3. また、HTTP_HOSTの一致部分も削除しました。同じサイトに複数のドメイン名/サブドメインがバインドされていない限り、実際には必要ありません。このような状況が必要な場合は、1行目以降に次の行を追加してください:RewriteCond %{HTTP_HOST} ^(mysite.localhost|mylivesite.com)

+0

ありがとうございましたLazyOne。私は最終的な "宛先"にHTTP_HOSTを置くことが可能であることを認識していませんでした (私は安全なページのために443を使用しないSSLオフロードロードバランサを持っているので、HTTPS = offではなくPORT 80を使用しています。 8080) – Geoff

+0

@Geoff私の答えが受け入れられたとマークする前にルールが正常に機能することを確認してください(私のルールはOKです - テストしましたが、設定が若干異なり、少し微妙に微調整されていますが、ほとんどありえません)。 – LazyOne