Как я могу заставить SSL / https, используя .htaccess и mod_rewrite страницу, специфичную для PHP.
Для Apache вы можете использовать mod_ssl
для принудительного SSL с SSLRequireSSL Directive
:
Эта директива запрещает доступ, если для текущего соединения не включен HTTP по SSL (т.е. HTTPS). Это очень удобно внутри виртуального хоста с поддержкой SSL или каталогов для защиты от ошибок конфигурации, которые представляют собой вещи, которые должны быть защищены. Когда эта директива присутствует, все запросы отклоняются, которые не используют SSL.
Это не будет делать перенаправление на https. Чтобы перенаправить, попробуйте следующее mod_rewrite
в вашем .htaccess файле
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
или любой из различных подходов, данных на
Вы также можете решить эту проблему изнутри PHP в случае, если ваш провайдер отключил .htaccess (что маловероятно, так как вы просили об этом, но в любом случае)
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
if(!headers_sent()) {
header("Status: 301 Moved Permanently");
header(sprintf(
'Location: https://%s%s',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
));
exit();
}
}
%{HTTP:X-Forwarded-Proto}
или%{HTTP:X-Real-Port}
переменные, чтобы проверить, включен ли SSL.RewriteRule <input-pattern> <output-url>
. Таким образом, пространство должно быть там, и сингл^
просто говорит «соответствовать всем входным URL».Я нашел
mod_rewrite
решение, которое хорошо работает как для прокси, так и для прокси серверов.Если вы используете CloudFlare, AWS Elastic Load Balancing, Heroku, OpenShift или любое другое решение Cloud / PaaS, и у вас возникают циклы перенаправления с обычными перенаправлениями HTTPS, попробуйте следующий фрагмент.
источник
PHP решение
Заимствуя непосредственно из исчерпывающего ответа Гордона, я отмечаю, что в вашем вопросе упоминается, что он связан с конкретной страницей при форсировании HTTPS / SSL-соединений.
Затем, как можно ближе к верхней части этих страниц, которые вы хотите принудительно подключить через PHP, вы можете
require()
централизованный файл, содержащий эту (и любые другие) пользовательские функции, а затем просто запуститьforceHTTPS()
функцию.HTACCESS / mod_rewrite Решение
Я не реализовывал такого рода решения лично (я имел тенденцию использовать решение PHP, как и выше, для его простоты), но следующее может быть, по крайней мере, хорошим началом.
источник
RewriteCond %{REQUEST_METHOD} !^POST$
?RewriteCond %{REQUEST_METHOD} !^POST$
должна предотвращать влияние этих перенаправлений на отправку POST.Мод-переписать решение на основе:
Использование следующего кода в htaccess автоматически перенаправляет все http-запросы на https.
Это перенаправит ваши запросы не-www и www на www- версию https.
Другое решение (Apache 2.4 *)
Это не работает на более низких версиях apache, так как переменная% {REQUEST_SCHEME} была добавлена в mod-rewrite начиная с версии 2.4.
источник
Я просто хотел бы отметить, что Apache имеет худшие правила наследования при использовании нескольких файлов .htaccess на разных глубинах каталогов. Два ключевых подводных камня:
RewriteOptions InheritDownBefore
директиву (или аналогичную), чтобы изменить это. (см. вопрос)Это означает , что предлагаемое глобальное решение на Apache Wiki это не будет работать , если вы используете какие - либо другие файлы .htaccess в подкаталогах. Я написал модифицированную версию, которая делает:
источник
Просто и легко, просто добавьте следующее
источник
Этот код работает для меня
источник
Простой:
замените ваш URL на example.com
источник
для принудительного использования SSL с Apache .htaccess вы можете использовать
для перенаправления вышеуказанный ответ правильный
источник
попробуйте этот код, он будет работать для всех версий URL, таких как
http://www.website.com
источник