Функция PHP на каждой странице вызывает цикл перенаправления

0

Я работаю с некоммерческими приложениями, которые были созданы кем-то еще в начале этого года. Сайт должен быть безопасным, поэтому я работал со своим хостом, чтобы установить 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');
?>
  • 0
    Я уверен, что dreamhost позволит использовать .htaccess в каталогах на их хосте. если нет, вы можете легко связаться с их поддержкой и сообщить, что вам это нужно. В большинстве хостинговых компаний включен файл .htaccess, включая godaddy и другие хостинговые компании, которые используют общие, виртуальные, выделенные и виртуальные выделенные учетные записи. это общая черта.
Теги:
ssl
.htaccess
redirect

1 ответ

0

Ваша проблема здесь:

$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();
}
  • 0
    Я не совсем понимаю вашу точку зрения. Я пытаюсь определить localhost, а не перенаправить. Условие if из того, что я понимаю, состоит в том, что условие if сравнивает хост с моим массивом, и, поскольку оно требует НЕ в массиве, тогда все, что не является доменом локального хоста, должно запускать функцию перенаправления. Затем функция должна определить, был ли использован https, и в этом случае она не будет перенаправлена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню