Как отдавать страницы вида http://t-wordpress.test/page/51/ с кодом 404?

iguania
На сайте с 10.12.2010
Offline
72
594

Добрый день, уважаемые.

После того, как были удалены некоторые посты блога, работающего под управлением движка WP, встал вопрос о том, чтобы отдавать страницы вида http://t-wordpress.test/page/51/ с кодом 404, вместо 200, как это предусмотрено движком. Это нужно для того, чтобы из индекса ПС Google были удалены страницы для которых уже не предусмотрено постов и содержащие текст:

Не найдено


К сожалению, по вашему запросу ничего не найдено.

В index.php соответствующей темы есть условие

<?php if (have_posts()) ?>

{ есть есть посты }
<?php else : ?>
<?php _e('К сожалению, по вашему запросу ничего не найдено.'); ?>
<?php endif; ?>

Хотелось бы привязаться к этому условию и отдавать 404 (либо 410) код вместо 200, но вот как, пока что не знаю. Есть вариант добавить в header.php до DOCTYPE строку

<?php if ( ! have_posts()) header("HTTP/1.0 404 Not Found"); ?>

но не уверен, что в логи апача не посыпятся сообщения о том, что уже невозможно модифицировать заголовки, т.к. WP выводит еще какой-то код до включения header.php. Также такие страницы (http://t-wordpress.test/page/51/) попадают в кэш, работающий под управлением плагина (WP Cache, WP Super Cache, WP Hyper Cache). Возможно, что последнее получится обойти путем добавления соответствующего условия кэширования в плагин, либо добавив в заголовок информацию о том, чтобы эти страницы не кэшировались...

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

Все всегда заканчивается хорошо. Если все закончилось плохо, значит, это еще не конец…
siv1987
На сайте с 02.04.2009
Offline
427
#1

Можно 410 отдать

RewriteEngine On

RewriteRule ^page/\d+/$ index.php [G,L]

iguania
На сайте с 10.12.2010
Offline
72
#2
siv1987:
Можно 410 отдать

RewriteEngine On
RewriteRule ^page/\d+/$ index.php [G,L]

Да, но в таком случае 410 будет отдаваться для всех страниц вида /page/{id}... нужно, чтобы еще дополнительно соблюдалось это условие ( if ( ! have_posts()) ), т.е. для этой страницы не было найдено постов. В любом случае спасибо Вам за ответ.

SeVlad
На сайте с 03.11.2008
Offline
1609
#3
iguania:
с кодом 404, вместо 200, как это предусмотрено движком.

Движком как раз предусмотрено отдавать 404 в случае отсутствия страниц. А вот левые плаги или тема (или кривые руки) - те, да могут и переназначить ответ.

iguania:
попадают в кэш,

Почистить кеш - не?

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий