301 или 302 перенаправление с PHP - PullRequest
58 голосов
/ 20 февраля 2012

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

Есть ли способ показать правильное состояние перенаправления 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');
};

Ответы [ 6 ]

118 голосов
/ 20 февраля 2012

Для 302 Found, т.е. для временного перенаправления, выполните:

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, выполните:

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

Для болееinfo проверьте руководство по 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>
17 голосов
/ 20 февраля 2012

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

header('Location: http://www.example.com/', true, 301);
exit;
6 голосов
/ 20 февраля 2012

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

3 голосов
/ 20 февраля 2012

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

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

так что вы уже поступаете правильно.

3 голосов
/ 20 февраля 2012

Вы проверяли, какой заголовок вы получаете?Потому что вы должны получить 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;
?>
1 голос
/ 18 апреля 2018

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...