共有ホスト(Mediatemple Gridserver)でホストしているショッピングサイトがあります。サイトの一部ではHTTPS(チェックアウトなど)を使用する必要がありますが、残りの部分ではHTTPを使用する必要があります。
特定のURLに対して常にHTTP/HTTPSの正しい使用を強制する方法を誰かが知っていますか?さまざまな状態で機能しましたが、HTTP上にあるはずのページに対してリクエストを取得できませんが、HTTPSを使用してリクエストを正しく切り替えることができます。
SOを見回しましたが、これに対する適切な答えを見つけることができませんでした。
私はワードプレスの私の管理フォルダーにこれに似たものを使用します:
#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 を確認してください。
これはほとんどすべてのシナリオで機能し、実際のvhostまたは.htaccessで機能するはずです。
RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L]
(%{REQUEST_URI}の前のスラッシュを忘れないでください。これにより、ポート番号を渡すことができるため、危険です。)
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L]
ロードバランサーの背後で問題が発生しました。この方法で修正しました。
この答え で詳しく説明されているように、必要に応じてhttps://
リンクを使用するようにアプリケーションを修正します。自動リダイレクトに依存しないでください。リンク/フォームをhttps://
経由でhttps://
URLにもアクセスしたことがない場合、誤った安心感につながる可能性があります。 mod_rewrite
を自動的に使用すると、そのような間違い(脆弱性の可能性もあります)の検出が困難になります。
私のためにこれを働きました(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
も同様ですが、成功しませんでした。
私はそれがそうあるべきだと思います:
RewriteCond %{HTTPS} =on
^/checkout(.*) http://shoppingsite.com/checkout$1 [R]
mod_rewrite のドキュメントを参照してください。