301 или 302 перенаправление с PHP

Я рассматриваю возможность использования следующего кода на этапе запуска веб-сайта, чтобы показать пользователям для обслуживания страница, показывая мне остальную часть сайта.

есть ли способ показать правильный статус 302 re-direction для поисковых систем или я должен искать другой .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');
};

6 ответов


на 302 Found, т. е. временное перенаправление do:

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

Если вам нужен постоянный редирект, он же: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>

следующий код выдаст 301 перенаправление.

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

Я не думаю, что это действительно имеет значение, как вы это делаете, из 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 (по умолчанию).


вы проверили, какой заголовок вы получаете? Потому что вы должны получить 302 С выше.

из руководства:http://php.net/manual/en/function.header.php

второй частный случай-заголовок" Location:". Он не только отправляет этот заголовок обратно в браузер, но также возвращает код состояния перенаправления (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;
?>

из PHP документация:

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

таким образом, вы уже делаете правильные вещи.


сохранить этот файл в том же каталоге, что .реврайт

RewriteEngine on
RewriteBase / 

# To show 404 page 
ErrorDocument 404 /404.html

# Permanent redirect
Redirect 301 /util/old.html /util/new.php

# Temporary redirect
Redirect 302 /util/old.html /util/new.php