The HTTP status code changes the way browsers and robots handle redirects, so if you are using header(Location:) it's a good idea to set the status code at the same time. Browsers typically re-request a 307 page every time, cache a 302 page for the session, and cache a 301 page for longer, or even indefinitely. Search engines typically transfer "page rank" to the new location for 301 redirects, but not for 302, 303 or 307. If the status code is not specified, header('Location:') defaults to 302.
Код
<?php
// 301 Moved Permanently -перемещено навсегда
header("Location: /foo.php",TRUE,301);
// 302 Found - найдено (по умолчанию)
header("Location: /foo.php",TRUE,302);
header("Location: /foo.php");
// 303 See Other - следует посмотреть другую страницу
header("Location: /foo.php",TRUE,303);
// 307 Temporary Redirect - временный редирект
header("Location: /foo.php",TRUE,307);
?>
Иначе говоря: от номера кода "HTTP status" отправляемого вебсервером клиенту в заголовках зависит то каким образом отдаваемую странцу воспринимают броузеры и поисковые роботы, поэтому если вы используете заголовок location, то хорошей идеей будет сразу уже устанавливать соответствующий HTTP status code.
При 307-ом редиректе броузеры каждый раз сначало пробуют загрузить исходную страницу на которой был временный редирект, кэшируют результаты редиректа с кодом 302 - на время сессии, и а с кодом 301 - практически навсегда.
Поисковые системы, как правило, переносят значение pagerank со страниц с 301-ым редиректом, на страницу назначения, при чем в случае с другими кодами: 302, 303 или 307 - этого не происходит. Если статус код не указан (как это обычно делалось у меня smile.gif ) отправляется код 302.
А теперь бонус, не относящийся к редиректам но относящийся к отправке HTTP status code, для того чтобы отпарвить заголовок "404 страница не найдена", используйте следующий код:
Код
<?php
header("HTTP/1.0 404 Not Found");
?>
Кроме того когда нужно просто отправить опредленный код и при этом отобразить пользователю какую то справочную информацию, точно так же как 404-ый код отправляем заголовок с любым другим статус кодом:
Код
<?php
header("HTTP/1.0 307");
echo "Страница временно не доступна."
?>
Думаю поисковики воспримут как нужно, а пользователь оценит по достоинству, по крайней мере в некоторых CMS - информационные сообщения о причине редиректа - просто жизненно необходимы.
Другие коды:
Код
[Informational 1xx]
100="Continue"
101="Switching Protocols"
[Successful 2xx]
200="OK"
201="Created"
202="Accepted"
203="Non-Authoritative Information"
204="No Content"
205="Reset Content"
206="Partial Content"
[Redirection 3xx]
300="Multiple Choices"
301="Moved Permanently"
302="Found"
303="See Other"
304="Not Modified"
305="Use Proxy"
306="(Unused)"
307="Temporary Redirect"
[Client Error 4xx]
400="Bad Request"
401="Unauthorized"
402="Payment Required"
403="Forbidden"
404="Not Found"
405="Method Not Allowed"
406="Not Acceptable"
407="Proxy Authentication Required"
408="Request Timeout"
409="Conflict"
410="Gone"
411="Length Required"
412="Precondition Failed"
413="Request Entity Too Large"
414="Request-URI Too Long"
415="Unsupported Media Type"
416="Requested Range Not Satisfiable"
417="Expectation Failed"
[Server Error 5xx]
500="Internal Server Error"
501="Not Implemented"
502="Bad Gateway"
503="Service Unavailable"
504="Gateway Timeout"
505="HTTP Version Not Supported"
Редиректы в Apache (.htaccess)
Код
Options +FollowSymLinks
RewriteEngine on
RewriteCond {HTTP_HOST} ^yourdomain.com
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=permanent,L]
Код
Redirect 301 / http://www.yourdomain.com/
Комментариев нет:
Отправить комментарий