Я пытаюсь предотвратить доступ к определенным страницам моего сайта через HTTPS, и (по какой-то причине) я хочу сделать это через PHP, а не через .htaccess.
Вот код, который я использую:
if ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://mydomain.com");
}
Но по какой-то странной причине я застрял в бесконечном цикле и не могу заставить его работать. Когда я проверяю заголовки ответов в firebug, я вижу, что для заголовка location установлено значение https://mydomain.com вместо http://mydomain.com, что вызывает бесконечный цикл.
EDIT: Прямой доступ к http://mydomain.com работает.
Также обратите внимание: это работает, если я отправляю их на другую страницу, но не если я отправляю их на ту же страницу. Поэтому, если я запущу приведенный выше код в mydomain.com/somePage.php, а затем попытаюсь получить к нему доступ через https://mydomain.com/somePage.php, он будет правильно перенаправлен на домашнюю страницу (без SSL). Только когда я перенаправляю их на ту же страницу с другим протоколом, протокол игнорируется.
Что я делаю неправильно?
header("Location: http://, а неheader("Location: https://... или это то, что на самом деле говорит код? - person Nathan Loding   schedule 12.10.2011issetили будет достаточноif (!empty($_SERVER['HTTPS']))? Я не уверен, что вам нужно удваиватьissetи== 'on'. Если это не https, переменная $_SERVER['HTTPS'] будет пустой, поэтому должна работать простая проверка этой единственной переменной на наличие значения - по крайней мере, я бы так предположил. У меня сейчас нет сервера с поддержкой HTTPS для тестирования. - person Nathan Loding   schedule 12.10.2011301? - person Nathan Loding   schedule 12.10.2011exit;после ваших звонковheader(). - person igorw   schedule 12.10.2011