Я пытаюсь предотвратить доступ к определенным страницам моего сайта через 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