это еще один вопрос .htaccess. И я уже сделал свой обзор литературы. Буду признателен за любую помощь.
Требования:
- Принудительно использовать HTTPS только для нескольких URL.
- Браузер не должен говорить частично зашифрованная страница для страниц SSL.
Я использую CodeIgnitor и настроил base_url в config.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, а любой 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]
Просто хочу узнать, есть ли лучший подход к этой простой проблеме или я делаю это неправильно. Решит ли это использование хуков CI вместо .htaccess?
Заранее спасибо