301 перенаправления в PHP: нужно ли ему явно сказать, что это 301? - PullRequest
4 голосов
/ 15 декабря 2011

Это должно быть легко ...

Нужно ли явно указывать PHP, что я хочу сделать редирект 301? Вот так ...

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.example.com/");
?>

Обычно я пропускаю первое утверждение и просто делаю ...

<?php
header("Location: http://www.example.com/");
?>

Будет ли второй пример на самом деле перенаправлением 302?

1 Ответ

6 голосов
/ 15 декабря 2011

Да.

Цитировать руководство по тонкой настройке :

Второй особый случай - заголовок "Location:".Он не только отправляет этот заголовок обратно в браузер, но также возвращает код состояния REDIRECT (302) в браузер, если код состояния 201 или 3xx уже был установлен.

Наиболеевероятная причина этого заключается в том, что 302 Found является перенаправлением неопределенного назначения.Вы можете использовать четыре заголовка перенаправления 3xx.

  • 301 Moved Permanently - это перенаправление постоянное , например, для сохранения совместимости со старыми URL-адресами.Таким образом, многие браузеры будут кэшировать местоположение перенаправления и не будут проверять снова.
  • 303 See Other - это перенаправление, предназначенное, например, для действия Post-Redirect-Get - обратите внимание, что оноопределяется только как HTTP / 1.1
  • 307 Temporary Redirect означает «да, обычно это здесь, но сейчас ресурс где-то еще» - это может не соответствовать желаемому значению:Например, вы всегда хотите перенаправить на этом этапе.Опять же, определенный в HTTP / 1.1
  • Наконец, 302 Found - это перенаправление неопределенного назначения - используется, когда вышеперечисленное неприменимо, или когда требуется совместимость с HTTP / 1.0(это все еще проблема в 2011 году?);как таковой, он используется по умолчанию.
...