[DLE] Как исправить ответ "404 Not Found" для пустых категорий DLE

Korew
На сайте с 31.12.2007
Offline
195
6341

На форуме уже поднималась эта проблема:

/ru/forum/720247

Там даже есть решение, но оно немного неправильное. Сейчас объясню.

Само решение:

Silver_UA:
Решение найдено:

В файле engine/modules/show.short.php (DLE 9.6 — строка 583 / DLE 9.5 — строка 530) необходимо удалить следующий код:

} elseif ( !$news_found AND !$allow_userinfo AND $do != '' and $do != 'favorites' and $view_template != 'rss' ) { 
echo 'test4';
if ( $newsmodule ) @header ( "HTTP/1.0 404 Not Found" );
msgbox ( $lang['all_err_1'], $lang['news_err_27'] );

Проблема в том, что DLE будет отдавать код статуса HTTP: "404 Not Found" для всех пустых категорий на сайте. Для меня это недопустимо, т.к. в некоторых категориях я хочу вывести статический контент + новости через тег {custom}.

Решение по ссылке вначале этой темы помогает, но и создает дополнительную проблему. Теперь DLE отдает код статуса HTTP: "200 OK" для любых категорий, даже для несуществующих.

У меня такая структура:

site.ru/category/

site.ru/category/subcategory/

Новости добавляются в подкатегорию. Для site.ru/category/ DLE отдает "404 Not Found", а для site.ru/category/subcategory/ "200 OK".

Бывают ситуации, когда подкатегория тоже пустая, но на ней выводится статический контент, поэтому она тоже должна отвечать "200 OK".

Можно ли как-то заставить DLE проверять, существует ли категория на сайте и если да, то отвечать "200 OK", а если категории не существует (или подкатегории), то отвечать "404 Not Found".

PS Это, конечно, недоработка движка. Стоило предоставить вебмастерам решать, какие категории будут индексироваться, а какие нет. Вебмастер сам в состоянии удалить категорию, если она не нужна на сайте.

LovelAss
На сайте с 05.06.2009
Offline
96
#1

Возможно такой способ прокатит:


if ($category_id && $category_id != "not detected") {
header("HTTP/1.1 200 OK");
} else {
header("HTTP/1.1 404 Not Found");
}
Korew
На сайте с 31.12.2007
Offline
195
#2

LovelAss, я в пхп не силен. Не подскажите куда вставить этот код или что им заменить?

LovelAss
На сайте с 05.06.2009
Offline
96
#3

Korew, ну видимо строку из примера выше:


if ( $newsmodule ) @header ( "HTTP/1.0 404 Not Found" );
Korew
На сайте с 31.12.2007
Offline
195
#4

LovelAss, получилось. Все работает вроде правильно. Спасибо большое!

Я немного упростил, в строку:

} elseif( !$news_found AND !$allow_userinfo AND $do != '' and $do != 'favorites' and $view_template != 'rss' ) {

добавил:

and $category_id == "not detected"

заработало.

Конечная инструкция, может кому-нибудь пригодится:

в файле /engine/modules/show.short.php строку

	} elseif( !$news_found AND !$allow_userinfo AND $do != '' and $do != 'favorites' and $view_template != 'rss' ) {

заменить на:

	} elseif( !$news_found AND !$allow_userinfo AND $do != '' and $do != 'favorites' and $view_template != 'rss' and $category_id == "not detected" ) {

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