2012-01-17 3 views
0

У меня только что был установлен ssl для сайта, над которым я работаю, и мне, очевидно, нужно получить несколько страниц (checkout и т. Д.), Перенаправленных на https.Проблема с перенаправлением на HTTPS с PHP

В настоящее время я использую этот код:

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { 
    $url = 'https://www.mysite.php'; 
    header("location: ". $url); 
    exit(); 
} 

Firefox говорит мне, что «страница пытается перенаправить таким образом, что никогда не будет завершена»

var_dump of $ _SERVER не показывает ['HTTPS'] или подобное, когда я нахожусь на защищенной странице. Это находится в небольшом пакете unix Network Solutions. Возможно ли, что мне нужно проверять другую переменную сервера или, возможно, мне нужно изменить некоторые настройки сервера?

Очевидно, что сценарий никогда не находит HTTPS, поэтому он пытается перенаправить без конца.

+0

Я думаю, что '$ _SERVER ['HTTPS']' зависит от Apache. Если они используют nginx или что-то еще, это может вообще не отображаться. – ceejayoz

+0

Почему бы не использовать перезаписываемый двигатель? это работает хорошо. – rkosegi

ответ

0

Это становится ясным, если вы используете OR:

if (!isset($_SERVER['HTTPS']) OR !$_SERVER['HTTPS']) { 

Скорее всего, один из условий всегда истинно, даже если вы уже находитесь в режиме HTTPs.

Вы хотите AND:

if (!isset($_SERVER['HTTPS']) AND !$_SERVER['HTTPS']) { 
+0

или благодаря тому, что является его именем, 'if (! (Isset ($ _ SERVER ['HTTPS'] OR! $ _ SERVER ['HTTPS']))' ;-) – Tim

+0

Это также не сработало. hmmm ... – absentx

0

Я использую эту форму SSL Проверка слишком. Для меня работает мой код. Вот что я делаю.

if(empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") { 
    header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); 
} 

Это прекрасно работает и также перенаправляет вас на предыдущий URL.

надеюсь, что это поможет.

+0

К сожалению, это тоже не сработало. – absentx

+0

Если вы хотите проверить, существует ли _SERVER, сделайте print_r ($ _ SERVER); на странице, с которой вы можете получить доступ через Https. тогда проверьте, является ли ключ переменной HTTPS. или если вы можете найти любую клавишу, которая может указывать на то, что вы находитесь в режиме https (возможно, у вас есть ключ местоположения, в котором хранится текущее местоположение, включая текущую схему), поэтому в некоторых случаях вы можете сделать preg_match с помощью «/^https: \/\ // "и проверьте это, если https использует. – prdatur

+0

print_r ($ _ SERVER) не показывает различий между тем, когда на HTTP и на странице HTTPS ... и я просмотрел его несколько раз! – absentx