2015-12-24 3 views
0

Почему 2 перенаправления PHP вызывают цикл переадресации? Я пытаюсь использовать PHP вместо правил страницы. Ниже я пытаюсь заставить «https://www». для всех моих веб-страниц.Почему 2 перенаправления PHP вызывают цикл перенаправления?

<?php 
if ($_SERVER['HTTPS'] != "on") { 
    header("Location: https://{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}"); 
} 
if (substr($_SERVER['SERVER_NAME'], 0, 4) != 'www.') { 
    header("Location: https://www.{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}"); 
} 
?> 
+0

'.htaccess' действительно лучше справился бы с этим ... – Rasclatt

+0

Я хочу, чтобы мой код был гибким, поэтому я могу перейти от PaaS к PaaS, не беспокоясь о поддержке .htaccess. –

+0

Это вызвало ошибку «Слишком много перенаправлений» для меня. Решение HankyPanky с 1 лайнером отлично. Вам нужно всего лишь 1 условие, чтобы проверить, отключен ли https, а хост - не-www. – starkeen

ответ

1

Объедините эти 2 условия

if ($_SERVER['HTTPS'] != "on" || substr($_SERVER['SERVER_NAME'], 0, 4) != 'www.') { 
    header("Location: https://www.yourwebsite.com{$_SERVER['REQUEST_URI']}"); 
} 

Без этого, вы первым перенаправить письменный протокол HTTPS на HTTPS, то вы снова проверить, если HTTPS на WWW так его, как тратить 2 запроса перед тем, как к реальному URL.

Не полагайтесь на имя сервера, если хотите сохранить его гибким, так как он может быть испорчен в конфигурации сервера.

+0

Хороший ответ. Добавление 'exit;' после каждого вызова 'header' также должно работать. –

+0

Это правда, хотя он остановит цикл, но он все равно будет тратить 2 http-запроса, прежде чем достигнуть правильного URL-адреса, если пользователь набрал 'http: // yourdomain.com' первым –

+0

Что делать, если WWW есть, но HTTPS не является ? например 'http: // www.google.com' ->' https: // www.www.google.com'. Было бы 2 www.www.? –

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