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