2015-02-11 2 views
0

Я нашел решение для установки одной страницы на моем сайте WordPress для использования https, хотя я пытаюсь применить ssl к двум страницам вместо одного. Я пробовал различные if или statements, но, похоже, не смог правильно получить синтаксис.Использовать SSL только на определенных страницах с помощью PHP

Ниже мое заявление, если это работает отлично на одной странице:

if (!empty($_SERVER['HTTPS']) && !empty($_SERVER['REQUEST_URI'])) 
    { 
    if ($_SERVER['HTTPS'] == 'on' && $_SERVER['REQUEST_URI'] != '/bill-pay/') 
     { 
     header("Location:http://example.com{$_SERVER['REQUEST_URI']}", 301); 
     exit; 
     } 
    elseif ($_SERVER['HTTPS'] != 'on' && $_SERVER['REQUEST_URI'] == '/bill-pay/') 
     { 
     header("Location: https://example.com{$_SERVER['REQUEST_URI']}", 301); 
     exit; 
     } 
    } 

Ради ясности, я только добавил свою версию, которая работает на одной странице.

+2

Не делайте этого. SSL отлично. SSL (сейчас) дешево. SSL защищает ваших пользователей. SSL улучшает ваш SEO ([да, действительно] (http://googlewebmastercentral.blogspot.co.uk/2014/08/https-as-ranking-signal.html)). Просто включите SSL для каждой страницы. Попросите простой HTTP-сайт просто перенаправить на HTTPS. – Quentin

+1

@Quentin: Ну, так как HTTPS эффективно отключает долгосрочное кэширование в большинстве браузеров, это немного идиотка Google IMHO - тем более что, с другой стороны, с их файлом PageSpeed ​​они хотят, чтобы люди максимально использовали кеширование ресурсов ... – CBroe

+0

@ CBroe Нет, если вы правильно используете свои кеширующие заголовки. 'Cache-Control: public' – ceejayoz

ответ

1

бы мог подумать прямолинейный ...

if (!empty($_SERVER['HTTPS']) && !empty($_SERVER['REQUEST_URI'])) 
{ 
    if ($_SERVER['HTTPS'] == 'on' && !($_SERVER['REQUEST_URI'] == '/bill-pay/' || $_SERVER['REQUEST_URI'] == '/other-page/')) 
    { 
    header("Location:http://example.com{$_SERVER['REQUEST_URI']}", 301); 
    exit; 
    } 
    elseif ($_SERVER['HTTPS'] != 'on' && ($_SERVER['REQUEST_URI'] == '/bill-pay/' || $_SERVER['REQUEST_URI'] == '/other-page/')) 
    { 
    header("Location: https://example.com{$_SERVER['REQUEST_URI']}", 301); 
    exit; 
    } 
} 

... должен сделать трюк

Редактировать

Этот код может быть более подходящим, учитывая замечания:

if (isset($_SERVER['REQUEST_URI']) && ($_SERVER['REQUEST_URI'] == '/bill-pay/' || $_SERVER['REQUEST_URI'] == '/other-page/')) 
{ 
    if (!isset($_SERVER['HTTPS']) || empty($_SERVER['HTTPS'])) 
    { 
     header("Location: https://example.com{$_SERVER['REQUEST_URI']}", 301); 
     exit; 
    } 
} 
else 
{ 
    if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS'])) 
    { 
     header("Location: http://example.com{$_SERVER['REQUEST_URI']}", 301); 
     exit; 
    } 
} 

Вспомнить empty() разрешается до false, если значение не установлено;)

+0

Эй, спасибо за ответ. Я думал, что это решение будет работать, но при таком подходе я получаю ошибку переадресации на обеих страницах. Все остальные страницы на сайте загружаются правильно. Любые идеи о том, что может вызвать эту ошибку? Хотелось бы вам привести рабочий пример, но сайт активен с активной кампанией по электронной почте, поэтому я пока не могу использовать эти страницы. – Byron

+0

Хм ... Просто интересно, почему вы проверяете значение 'on'? http://php.net states "Указывает на непустое значение, если скрипт был запрошен через протокол HTTPS.". Я вижу цикл переадресации там, если '$ _SERVER ['HTTPS']' было непустым значением, отличным от 'on' – colmde

+0

Также не забудьте очистить кеш браузера до тестирования - 301 переадресация имеет привычку придерживаться ... – colmde

2

Помните, что только защищающая часть сайта фактически практически не защищает. Через MITM или другие уязвимости злоумышленник может легко переписать ссылки на защищенные страницы на внешние страницы под контролем злоумышленника.

Помните, что SSL - это не только безопасное соединение, но и подтверждение того, кто вы (= ваш сайт) на самом деле. Следуйте его рекомендациям, пожалуйста, защитите весь сайт, запустите его через SSL Labs. Это лучше для всех, особенно для ваших клиентов.

Смежные вопросы