これはさらに別の.htaccessの質問です。そして、私はすでに私の文献レビューをしました。助けていただければ幸いです。
要件:
- いくつかのURLに対してのみHTTPSを強制します。
- ブラウザはSSLページに対して部分的に暗号化されたページを言うべきではありません。
私はCodeIgnitorを使用しており、config.phpのbase_urlを次のように調整しました。
$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]
これにより、abc、xyz、またはpqrを含むURLは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フックを使用すると、これを解決できますか?
前もって感謝します