Как заставить WordPress посылать код 301

WordPress, FastCGI и редирект 301Как заставить WordPress посылать код 301 при использовании FastCGI:

Всё-таки удивительная штука WordPress… Сегодня чисто случайно обнаружил, что если PHP работает в режиме FastCGI (например, связка WordPress + nginx + PHP), то все редиректы с кодом 301 (Permanent Redirect) превращаются в редиректы с кодом 302 (Temporary Redirect).

Чем это грозит? Если Вы занимаетесь спамомSEO, то Вы, вероятно, знаете, что переход с кодом 302 не передаёт PageRank. Иными словами, если Вы изменили структуру пермалинков или по той или иной причине в Google «раскручена» страница с несколько другой постоянной ссылкой (например, http://example.com/?p=202 ), то «канонический редирект» (см. wp-includes/canonical.php) не передаст PageRank целевой странице.
Еще раз повторюсь, это актуально только в случае использования PHP в режиме FastCGI (и для IIS, но это оффтопик).

Есть два способа решения проблемы:

1.Написание плагина, реализующего свой вариант wp_redirect() (функция wp_redirect() определена в wp-includes/pluggable.php, что даёт возможность её переопределения);
2.Изменение кода wp_redirect() в wp-includes/pluggable.php
Я рассмотрю только второй вариант.

В оригинале функция wp_redirect() выглядит следующим образом:

[-] View Code PHP EasyClearingfunction wp_redirect($location, $status = 302) {
global $is_IIS;

$location = apply_filters(‘wp_redirect’, $location, $status);
$status = apply_filters(‘wp_redirect_status’, $status, $location);

if ( !$location ) // allows the wp_redirect filter to cancel a redirect
return false;

$location = wp_sanitize_redirect($location);

if ( $is_IIS ) {
header(«Refresh: 0;url=$location»);
} else {
if ( php_sapi_name() != ‘cgi-fcgi’ )
status_header($status); // This causes problems on IIS and some FastCGI setups
header(«Location: $location»);
}
} Всё, что требуется — закомментировать строку if ( php_sapi_name() != ‘cgi-fcgi’ ). При этом не забываем прочитать комментарий разработчиков: «This causes problems on IIS and some FastCGI setups».

Должно получиться что-то вида:

[-] View Code PHP EasyClearingfunction wp_redirect($location, $status = 302) {
global $is_IIS;

$location = apply_filters(‘wp_redirect’, $location, $status);
$status = apply_filters(‘wp_redirect_status’, $status, $location);

if ( !$location ) // allows the wp_redirect filter to cancel a redirect
return false;

$location = wp_sanitize_redirect($location);

if ( $is_IIS ) {
header(«Refresh: 0;url=$location»);
} else {
// if ( php_sapi_name() != ‘cgi-fcgi’ )
status_header($status); // This causes problems on IIS and some FastCGI setups
header(«Location: $location»);
}
} Не забываем сохранить файл, после чего редиректы с кодом 301 останутся редиректами с кодом 301

Система авторегистрации в каталогах, статьи про раскрутку сайтов, web дизайн, flash, photoshop, хостинг, рассылки; форум, баннерная сеть, каталог сайтов, услуги продвижения и рекламы сайтов

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Security Code: