Я работаю с некоммерческими приложениями, которые были созданы кем-то еще в начале этого года. Сайт должен быть безопасным, поэтому я работал со своим хостом, чтобы установить SSL-сертификат. Я понимаю, что обновление файла сервера.htaccess будет проще выполнять перенаправление, но наше участие заканчивается примерно через 3 недели. Трудно получить требования, которые подаются через контакт с некоммерческими клиентами в принимающую компанию. В качестве альтернативы, я хотел бы направить редирект на основе php на всякий случай.
Это начальный раздел на странице заголовков приложений, включенной на все страницы. У нас есть 3 тестовых сервера с разными доменами и производственным доменом. Я добавил условие, поэтому перенаправление не произойдет при запуске локально. Когда я вызываю функцию с моим условием, возникает цикл перенаправления на тестовых серверах (у них есть сертификаты SSL). Может кто-то помочь с тем, что я не могу понять? Благодарю.
Или кто-нибудь знает, может ли файл apache.htaccess обновляться как пользователь с Dreamhost?
<?php
function redirectToHTTPS() {
if($_SERVER['HTTPS']!="on") {
$redirect= "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
header("Location:$redirect");
}
}
$serverList = array('localhost', '127.0.0.1');
if(!in_array($_SERVER['HTTP_HOST'], $serverList)) {
redirectToHTTPS();
}
ob_start();
include ($_SERVER['DOCUMENT_ROOT'].'/rmhcOmahaTeam/config/paths.php');
include ($_SERVER['DOCUMENT_ROOT'].'/rmhcOmahaTeam/config/db_connect.php');
?>
Ваша проблема здесь:
$serverList = array('localhost', '127.0.0.1');
if(!in_array($_SERVER['HTTP_HOST'], $serverList)) {
redirectToHTTPS();
}
Что говорит этот код, "если переменная HTTP_HOST
является localhost
или 127.0.0.1
, а затем перенаправляется на сайт SSL". Затем в функции redirectToHTTPS()
вы перенаправляетесь на тот же HTTP_HOST
вы проверяли. Итак, в основном, вы говорите:
if (true) {
redirectToHTTPS();
}
Вам нужно проверить протокол, а не HTTP_HOST
:
define('HTTPS', isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN));
if ( ! HTTPS) {
redirectToHTTPS();
}