301 или 302 Перенаправление с помощью PHP
Я рассматриваю использование следующего кода на этапе запуска веб-сайта, чтобы показать пользователям страницу обслуживания, показывая мне остальную часть сайта.
Есть ли способ показать правильное состояние переадресации 302 поисковым системам или я должен искать другой подход .htaccess
?
$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');
};
Ответы
Ответ 1
При a 302 Found
, то есть временное перенаправление:
header('Location: http://www.yoursite.com/home-page.html');
// OR: header('Location: http://www.yoursite.com/home-page.html', true, 302);
exit;
Если вам нужна постоянная переадресация, aka: 301 Moved Permanently
, do:
header('Location: http://www.yoursite.com/home-page.html', true, 301);
exit;
Для получения дополнительной информации ознакомьтесь с руководством по PHP для функции заголовка Doc. Кроме того, не забудьте вызвать exit;
при использовании header('Location: ');
Но, учитывая, что вы выполняете временное обслуживание (вы не хотите, чтобы поисковые системы индексировали вашу страницу), он рекомендовал вернуть 503 Service Unavailable
с помощью специального сообщения (то есть вам не нужно перенаправление):
<?php
header("HTTP/1.1 503 Service Unavailable");
header("Status: 503 Service Unavailable");
header("Retry-After: 3600");
?><!DOCTYPE html>
<html>
<head>
<title>Temporarily Unavailable</title>
<meta name="robots" content="none" />
</head>
<body>
Your message here.
</body>
</html>
Ответ 2
Следующий код выдает 301 переадресацию.
header('Location: http://www.example.com/', true, 301);
exit;
Ответ 3
Вы проверили, какой заголовок вы получаете? Потому что вы должны получать 302
с помощью выше.
Из руководства: http://php.net/manual/en/function.header.php
Второй особый случай - заголовок "Location:". Он не только отправляет этот заголовок обратно в браузер, но также возвращает код статуса REDIRECT (302) в браузер, если код статуса 201 или 3xx уже не установлен.
<?php
header("Location: http://www.example.com/"); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit;
?>
Ответ 4
Из документации PHP :
Второй особый случай - заголовок "Location:". Он не только отправляет этот заголовок обратно в браузер, но также возвращает код статуса REDIRECT (302) в браузер, если код статуса 201 или 3xx уже не установлен.
чтобы вы уже поступали правильно.
Ответ 5
Я не думаю, что это действительно важно, как вы это делаете, от PHP или htaccess. Оба достигнут того же.
Единственное, что я хочу отметить, - хотите ли вы, чтобы поисковые системы начали индексировать ваш сайт на этом этапе обслуживания или нет. Если не, вы можете использовать код состояния 503
( "временно вниз" ). Вот пример htaccess:
RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} !=503
RewriteCond %{REMOTE_HOST} ^192\.168\.0\.1
ErrorDocument 503 /redirect-folder/index.html
RewriteRule !^s/redirect-folder$ /redirect-folder [L,R=503]
В PHP:
header('Location: http://www.yoursite.com/redirect-folder/index.html', true, 503);
exit;
С текущим кодом перенаправления PHP, который вы используете, перенаправление - это 302
(по умолчанию).