2011-07-11 15 views
0

ウェブページのサブセットをhttpsに、他のすべてのウェブページをhttpに強制します。 htaccessファイルで 私は別のポストで見つかった次のスクリプトを使用しますが、それは働いていませんでした...それがあるべきようウェブページのサブセットをHTTPSとして強制的に送信

RewriteCond %{HTTPS} off 
RewriteRule ^(login|signup)\.php https://%{HTTP_HOST}%{REQUEST_URI} [R,L,QSA] 

RewriteCond %{HTTPS} on 
RewriteCond ${REQUEST_URI} !(login|signup)\.php 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L,QSA] 

HTTPは、強制され、それがあるべきとしてHTTPSを強制されていますが、例えばhttps://mywebsite.com/signupブラウザに無限ループエラーが発生します。どのようなアイデアが間違っている?

次のように動作するように変更されましたが、SSLはウェブページの安全で安全でないアイテムのために部分的にしか実装されていません。私はURLを例えばにチェックした。画像、スタイルシート、外部のjavascriptファイルなどはすべて相対的なもので、問題はありません。誰かがこれに対処する方法を知っていれば、私はそれを聞いてうれしいでしょう。

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} ^/login$ [OR] 
RewriteCond %{REQUEST_URI} ^/signup$ 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !login$ 
RewriteCond %{REQUEST_URI} !signup$ 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L] 
+0

非ログイン/サインアップページにはHTTPを強制する必要はありません(アカウントがあれば、そのページはどうですか?HTTP経由で配信されますか?)。代わりに、適切なURLをコード内に生成してください(つまり、 'do' ')の代わりにmod_rewriteの助けを借りずに常にHTTPに行きます。顧客がHTTPS経由でホームページや他のページに行きたい場合は、その人に連絡してください。何も問題はありません。顧客が意図的にURLを変更しない限り、適切なURLを持つすべてのリンクがある限り、これは起こりません。 – LazyOne

+0

HTTPを強制しないことで、セキュアページの安全でないコンテンツ(CSS/JS/Images)に関する問題は発生しません。これは私のウェブサイトを常にコード化する方法です。はい、既存のページにドメイン名とプロトコルを含めるようにすべてのリンクを変更するのはかなり手間がかかりますが、新しいページ/新しいプロジェクトでは差異はありません**(追加のオーバーヘッドはありません)。はい、あなたはmod_rewrite(1つまたは2つの条件を追加)で修正できるはずですが、それは正しい方法ではありません(少なくとも私の意見では)。 – LazyOne

+0

ありがとうございました。私は今、mod_rewriteを使用して、接続を保護する必要のあるページでhttpsを強制します。 httpを強制した部分を削除しました。 js/css/imageファイルをhttpにリダイレクトする(これらのファイルはRewriteCondで検証されませんでした)、同じページに安全なアイテムと安全でないアイテムがあるという問題がありました。あなたはすべてがうまくいくと示唆したように、httpやhttps(そして、ユーザーがURLを変更した場合の後者の強制https)のすべてを適切に参照することで、ありがとうございました! – DigitalMD

答えて

0
  1. あなたの.htaccessの上にどこかにこの行を追加してみてください:

    Options +FollowSymLinks -MultiViews

  2. たぶん、あなたはこのリダイレクトを行う他のいくつかのルールを持っている - あなたならばそれが良いでしょう.htaccessファイルの全内容を提供する。

  3. 実際のPHPスクリプトの内部にリダイレクトされている可能性があります。いずれのACSEで

- あなたは、Apacheの設定ファイル(httpd.confのかのhttpd-vhost.conf)を編集することができた場合、あなたは書き換えデバッグRewriteLoglevel 9)を有効にして起こっている正確に何を見ることができます - これは最善のオプション(可能な場合)です。

+0

助けてくれてありがとう。 -MultiViewsを追加してもエラーは変わらず、他のリダイレクトルールはありません。私はhtaccessファイルを完全にクリーンアップしてデバッグしました。私は設定ファイルへのアクセス権がありませんが、私はホストにそれについて尋ねます。 – DigitalMD

+0

@DigitalMD共有ホスティングの場合は、Apacheを再起動する必要があるため、これらのログは非常に高速になります(ごくまれにあります)。1つの特定のドメインのみを有効にできるかどうかは不明です... – LazyOne

関連する問題