Temporarily Unavailable

PHP: Редирект 301 и 302

Редиректы или перенаправления в PHP это просто. Мы рассмотрим их шаг за шагом и я покажу, как избежать некоторых ловушек. Мы узнаем нюансы между 301 и 302 перенаправлением.

Для перенаправления на другую страницу с кодом 302 используйте функцию PHP header() .

header('Location: https://example.com/path/to/page');

Довольно просто, верно? Однако есть нюансы о которых следует помнить.

Не выводите текст перед отправкой заголовков

Следующий PHP код вызовет предупреждение:

 

echo 'Hello, World!';

header('Location: https://example.com/some/page');
Warning: Cannot modify header information - headers already sent by

Остановите выполнение кода

В большинстве случаев после отправки заголовка header() вам нужно будет остановить выполнение кода с помощью PHP функции exit() :

 

if (! empty($_POST['redirect']))
header('Location: https://example.com/some/page');

exit;
>

// После отправки заголовка выполнение кода будет остановлено благодаря exit()

Если вы не остановите выполнение кода, пользователь будет перенаправлен на новый URL-адрес только после завершения выполнения кода.

Устанавливайте корректный HTTP код

Функция header() может принимать параметры. Например, когда вы добавляете заголовок Location , будет автоматически установлен HTTP код 302 . Но если мы хотим выполнить перенаправление на новый URL с кодом 301 ?

header('Location: https://example.com/some/page', true, 301);

Часто задаваемые вопросы

Это должен быть редирект 302 или редирект 301?

В большинстве случаев вам следует придерживаться редиректа 302 выполняемого по умолчанию, если только не хотите постоянно перенаправлять своих пользователей.

Редирект 302 постоянный?

Редирект 302 временный — не постоянный.

Для чего используется редирект 302?

HTTP код 302 означает, что запрошенная страница была временна перемещена по другому адресу, указанному в поле Location заголовка страницы.

Редирект 302 использует в следующих случаях:

  • Вы продвигаете новый продукт, и хотите временно перенаправлять на него своих посетителей в течении ограниченного периода времени. Сохраняя при этом рейтинг своей страницы в поисковых системах и/или её позицию в поисковой выдаче.
  • Товар распродан и вам нужно временно переправить пользователей на страницу с другим товаром.
  • A/B тестирование. Вы хотите временно перенаправлять посетителей на другую страницу не влияя на поисковый рейтинг текущей станицы.

Однако следует заметить, что редирект 302 используется если метод запроса был GET или HEAD или вам неважно содержимое и заголовок запроса. В иных случаях следует использовать редирект 307 (например для запроса PUT ), заголовок и содержимое будут в не изменённом виде переданы по новому адресу указанному в поле Location .

Если требуется изменить метод запроса на GET — используйте редирект 303. Это бывает полезно если был запрос с методом PUT и вы хотите подтвердить выполненное действие.

Для чего используется редирект 301?

HTTP код 301 означает, что запрошенная страница была окончательно перенесена на новый адрес указанный в поле Location заголовка страницы.

Некоторые варианты использования редиректа 301:

  • Принудительное перенаправление с HTTP на HTTPS.
  • Перенаправление со старых URL-адресов на новые (если мы не хотим, чтобы люди натыкались на мёртвые ссылки). Полезно при переходе на новый домен.

Что лучше редирект 302 или 301?

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

Источник

301 or 302 Redirection With PHP

I’m considering using the following code during a website launch phase to show users a down for maintenance page while showing me the rest of the site. Is there a way to show the correct 302 re-direction status to search engines or should I look for another .htaccess based approach?

$visitor = $_SERVER['REMOTE_ADDR']; if (preg_match("/192.168.0.1/",$visitor)) < header('Location: http://www.yoursite.com/thank-you.html'); >else < header('Location: http://www.yoursite.com/home-page.html'); >; 

6 Answers 6

For a 302 Found , i.e. a temporary redirect do:

header('Location: http://www.example.com/home-page.html'); // OR: header('Location: http://www.example.com/home-page.html', true, 302); exit; 

If you need a permanent redirect, aka: 301 Moved Permanently , do:

header('Location: http://www.example.com/home-page.html', true, 301); exit; 

For more info check the PHP manual for the header function Doc . Also, don’t forget to call exit; when using header(‘Location: ‘);

But, considering you are doing a temporary maintenance (you don’t want that search engines index your page) it’s advised to return a 503 Service Unavailable with a custom message (i.e. you don’t need any redirect):

     Your message here.  

The syntax is void header ( string $string [, bool $replace = true [, int $http_response_code ]] ) — php.net/manual/en/function.header.php

OP asked for redirect during maintenance, in that case he must do temporary redirect with 302, not 301. In case of 301 aka permanent redirect, browser will never try that page but go to redirected one.

@michaeld Never, ever test placeholder code as if it were production code. It doesn’t matter what example URL is used in an answer—you should always substitute your own, known URL in its place before running the code.

The point is: should we redirect the client with a 302 and then issue a 503 page, or should we just set up a rewrite rule which would issue a 503 page directly to each client’s request?

The following code will issue a 301 redirect.

header('Location: http://www.example.com/', true, 301); exit; 

I don’t think it really matters how you do it, from PHP or htaccess. Both will accomplish the same thing.

The one thing I want to point out is whether you want the search engines begin to index your site in this «maintenance» phase or not. If not, you could use the status code 503 («temporarily down»). Here’s a htaccess example:

RewriteEngine on RewriteCond % !=503 RewriteCond % ^192\.168\.0\.1 ErrorDocument 503 /redirect-folder/index.html RewriteRule !^s/redirect-folder$ /redirect-folder [L,R=503] 
header('Location: http://www.yoursite.com/redirect-folder/index.html', true, 503); exit; 

With the current PHP redirect code you’re using, the redirect is a 302 (default).

Источник

301 редирект на php – как сделать

Наша статья о 301 редиректе с помощью .htaccess взорвала интернет и собрала уже более полумиллиона просмотров. htaccess – один из самых удобных, но единственных способов перенаправить страницу. Если у вас сайт на php, то вы можете воспользоваться данной инструкцией. Если у вас самописный сайт, который состоит из набора .php страниц, то для переадресации со старого URL на новый, вам нужно добавить в самый верх файл кусок кода с редиректом на нужную страницу.

Редирект страницы

header("HTTP/1.1 301 Moved Permanently"); header("Location: https://domain.ru/test.html"); exit();

Если редиректов на php нужно поставить много, то есть смысл составить отдельный файл, который будет содержать в себе все правила, например redirect.php.

if($_SERVER['REQUEST_URI'] == '/old-url-1/') < header("HTTP/1.1 301 Moved Permanently"); header("Location: https://domain.ru/new-url-1/"); exit(); >if($_SERVER['REQUEST_URI'] == '/old-url-2/') < header("HTTP/1.1 301 Moved Permanently"); header("Location: https://domain.ru/new-url-2/"); exit(); >

Таких правил можно написать сколько угодно, организовать условия синтаксически – тоже можно по-разному. Далее такой файл подключается к вашему сайту.

Редирект каждой страницы на такую же страницу другого домена

$ref=$_SERVER["QUERY_STRING"]; if ($ref!="") $ref="?".$ref; header("HTTP/1.1 301 Moved Permanently"); header("Location: https://domen.ru/".$ref); exit();

Проверка редиректа

Проверить переадресацию как для браузера, так и для робота:

  • Простой, удобный и функциональный – https://www.bertal.ru/
  • В Яндекс.Вебмастере: https://webmaster.yandex.ru/tools/server-response/

Полезные материалы:

Источник

Как сделать редирект на php?

Послать каждый может. А вот правильно перенаправить – это целое искусство. Но еще труднее дается перенаправление пользователей на нужный путь в интернете. Для этого лучше всего подходит редирект на php .

Что за редирект?

В веб-программировании возникают ситуации, когда нужно перенаправить пользователя, переходящего по ссылке, на другой адрес. Конечно, на первый взгляд реализация такого перенаправления выглядит немного « незаконной ». На практике же, такой редирект востребован не только среди злоумышленников, но и среди честных вебмастеров:

Что за редирект?

В каких случаях может потребоваться редирект:

  • Когда происходит замена движка сайта – в результате этого меняется архитектура всего ресурса. После чего возникает проблема, как сделать редирект;
  • При перекройке структуры ресурса – происходит добавление, удаление или перенос целых разделов или одного материала. Пока происходит этот процесс, временно можно организовать перенаправление пользователя на нужный раздел;
  • Если сайт недавно сменил свое доменное имя – после смены имени домена старое еще некоторое время будет фигурировать в поисковой выдаче. В этом случае редирект пользователя на новый домен будет реализован поисковой системой автоматически;
  • В процессе авторизации – как правило, на большом сайте есть две группы пользователей: обычные посетители и администраторы ресурса. В таком случае имеет смысл реализовать редирект каждого пользователя согласно его правам и роли. После авторизации администратор или модераторы сайта попадают в административную часть ресурса, а посетители – на пользовательскую часть ресурса.

Особенности редиректа на php

В отличие от других языков php обладает некоторыми преимуществами в реализации редиректа:

  • Php является серверным языком программирования. Поэтому перенаправление будет происходить не в html коде страниц, отображаемых в браузере, а в скрипте, размещенном на сервере;
  • Редирект на php может быть реализован несколькими способами. Что во многом расширяет его применение;
  • Благодаря обработке данных на сервере перенаправление, реализованное с помощью php, менее восприимчиво к действию фильтров поисковых систем.

Для редиректа в php используется функция header() . Она применяется для отправки заголовка http . Ее синтаксис:

void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

Принимаемые функцией аргументы:

string $string – строка заголовка;

Существует два типа этого аргумента. Первый предназначен для отправки кода состояния соединения. Он начинается с «HTTP/». Другой тип вместе с заголовком передает клиентскому браузеру код состояния (REDIRECT 302). Этот аргумент начинается с «Location:»

Особенности редиректа на php

  • bool $replace – является необязательным атрибутом типа bool . Отвечает за переопределение предыдущего заголовка. Если будет задано true , то предыдущий заголовок или заголовки одного типа будут заменены. Если в аргументе задано false , то перезапись заголовка не состоится. По умолчанию, задано значение true ;
  • http_response_code – аргумент принудительно устанавливает код ответа HTTP . Установка кода пройдет успешно при условии, что аргумент string не будет пустым.

Код состояния HTTP представляет собой часть верхней строки ответа сервера. Код состоит из трех цифр, после которых идет поясняющая надпись на английском языке. Первая цифра отвечает за класс состояния. Редиректу соответствуют коды от 300 до 307. Их полное описание можно найти в соответствующей технической документации.

При использовании функции header() для редиректа внешних ссылок большое значение имеет место расположения ее вызова. В коде он должен находиться выше всех тегов html :

Особенности редиректа на php - 2

Применение редиректа header()

Для демонстрации действия функции на локальном сервере нужно создать два файла. Один из них назовем redirect.php , а другой redirect2.php . Внутри первого разместим вызов функции в следующем формате:

В другом файле помещаем строку:

echo "Привет! Вы находитесь в файле redirect2.php";

Источник

Читайте также:  Как задать расположение html
Оцените статью