質問

これは .htaccess に関するもう 1 つの質問です。そして、私はすでに文献レビューを行っています。助けていただければ幸いです。

要件:

  1. 少数の URL に対してのみ HTTPS を強制します。
  2. ブラウザは言うべきではありません 部分的に暗号化されたページ SSL ページの場合。

私はCodeIgnitorを使用しており、 ベースURLconfig.php に:

$config['base_url'] = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? 'https://' : 'http://' ;
$config['base_url'] .= $_SERVER['HTTP_HOST'];
$config['base_url'] .= preg_replace('@/+$@','',dirname($_SERVER['SCRIPT_NAME'])).'/';

したがって、URL にアクセスすると、 https:// それに含まれるすべてのリンクも HTTPS になります。これは、「部分的に暗号化されたページ」の問題を回避するためです。

次の htaccess コードから始めました。

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]

これにより、任意の URL が ABC, xyz または pqr HTTPS にリダイレクトされ、HTTPS を持たない URL は強制的に HTTP に戻されます。

これはうまくいきましたが、唯一の問題は、「部分的に暗号化されたページ」の問題を回避できないことです。たとえば、URLを取得すると、 http://www.example.com/abc/index.php, にリダイレクトされます。 https://www.example.com/abc/index.php. 。しかし、このページのリンクには次のように書かれています https://www.example.com/images/logo.png, 、後者の書き換えルールにより HTTP に変更されます。これにより、ページが部分的に暗号化されます。

私も追加してみました http_referer この問題を解決するには次のようにチェックしますが、明らかに問題は解決しません。HTTPS ページからのクリックは HTTP に変換されないからです。

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_REFERER} !^(https)(.*)$
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]

この単純な問題に対して利用できるより良いアプローチがあるかどうか、それとも私のやり方が間違っているのかを知りたいだけです。.htaccess の代わりに CI フックを使用すると、これは解決しますか?

前もって感謝します

役に立ちましたか?

解決 2

わかった 。解決策が見つかったと思います。私のサーバーでもテストしました。正常に動作します ..リライトには http リファラー条件も必要でした

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_REFERER} !^https(.*)/(abc|xyz|pqr)(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]

これで、(abc,xyz,pqr) を含むページのいずれかにアクセスすると、https://... にリダイレクトされます。また、すべての埋め込みリンクは https から提供されます。これにより、ブラウザーに部分暗号化の警告 (ステータス バーの赤い警告サイン) が表示されなくなります。

これらのページから離れると、そのページはリファラー チェックにより SSL になり、このページには部分的に暗号化された警告が表示される可能性があります (ただし、我慢できます)。このページから離れると、すべてが非 SSL になります。

これが誰かに役立つことを願っています!!!

他のヒント

静的コンテンツを次のような別のドメインに置くことができます。 static.example.com そして、そのようなリクエストに対する HTTPS から HTTP へのリダイレクトを無効にします。

使用 //static.example.com/… そのリソースを参照するには、参照が含まれているドキュメントと同じ URI スキームを使用し、テストします。 RewriteRule そのようなリソースが要求された場合:

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !=static.example.com
RewriteRule !(^|/)(abc|xyz|pqr) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top