Я рассматриваю использование следующего кода во время фазы запуска веб-сайта, чтобы показать пользователям страницу обслуживания , показывая мне остальную часть сайта.
Есть ли способ показать правильный статус переадресации 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'); };
Для 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
, выполните следующие действия:
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;
Вы проверили, какой заголовок вы получаете? Потому что вы должны получить 302
с выше.
Из руководства: http://php.net/manual/en/function.header.php
Второй особый случай – заголовок «Местоположение:». Он не только отправляет этот заголовок обратно в браузер, но также возвращает код статуса 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; ?>
Из документации PHP:
Второй особый случай – заголовок «Местоположение:». Он не только отправляет этот заголовок обратно в браузер, но также возвращает код статуса REDIRECT (302) в браузер, если код статуса 201 или 3xx уже не установлен.
так что вы уже поступаете правильно.
Я не думаю, что это действительно важно, как вы это делаете, от 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
(по умолчанию).