редирект 404 не работает, если неверный адрес идет после /node/

Главные вкладки

Аватар пользователя poe poe 28 августа 2007 в 18:45

Нужен совет. Не получается настроить страницу 404
В админке (друпал 5-й версии) в разделе "управление ошибками" (error-reporting) указываем путь к созданной для этих целей ноде с сообщением об ошибке 404 (домен/node/ееномер). Однако при наборе в строке броузера ошибочного адреса типа: доменное-имя.com/abrakadabra редирект осуществляется. А вот если мы указываем адрес любой несуществуюшщей страницы в том виде, в каком формируются друпалом адреса страниц - то есть после /node/ - в этом случае просто загружается главная страница, а редиректа на нашу 404-ю ноду не происходит.

Сайт: hutorov.net

Комментарии

Аватар пользователя edhel edhel 28 августа 2007 в 19:13

Это фича) Мне вот еще не нравится аналогичная "фича": редактор забудет в href поставить http:// и при клике получается типа /news/www.xxx.ru. И тоже без ошибки как будто...

Обработку node/N несложно сделать своим модулем: хук _init, который смотрит на УРЛ и если он вида node/N, то делает простенький SELECT и если нету такой ноды, то генерирует ошибку 404.

Аватар пользователя poe poe 28 августа 2007 в 23:12

Я тут спросил людей еще в одном друпаловском сообществе, все говорят, что у них все пашет. Как думаете, если поставить модуль customerror (This module allows the site admin to create custom error pages for 404 (not found), and 403 (access denied).)
поможет?

Ну а главное, хотелось бы понять, что за фича? А то как-то все напрозрачно с этим друпалом.

Аватар пользователя poe poe 29 августа 2007 в 20:22

не смотря на то, что я установил модуль customerror, ничего не изменилось - все работает по тому же сценарию, если в несуществующем пути стоит /node/ - попадаешь на главную...

Загадка!
Хорошо бы выяснить, почему вообще происходит этот несанкционированный редирект на главную страницу! Можно ли его как-то запретить.

Аватар пользователя edhel edhel 29 августа 2007 в 20:43

Версия Drupal какая??

Страницы node/NID, где NID — реальный идентификатор, обрабатываются функцией node_page_view. А страница /node (она же - главная по умолчанию), функцией node_page_default. Поэтому когда вводим node/NID с неверным NID — вызывается последняя функция. Смотрим код это функции...

Вот кусок node.module из Drupal 5.0:

<?php

function node_page_default() {

$result = pager_query(db_rewrite_sql('SELECT n.nid......'), variable_get('default_nodes_main', 10));
..................
?>

А вот из 5.2:

<?php

function node_page_default($arg = NULL) {
// Prevent fallback to this page for node/*.
if (isset($arg)) {
return MENU_NOT_FOUND;
}
........................
?>

То бишь в последней версии добавили обработку неверного NID. Но я думаю это скорее баг был, который вылез из-за других изменений ядра. Потому что я проверял на Друпал 4.5 — там при неверном NID ошибка выдается.

Аватар пользователя poe poe 30 августа 2007 в 16:32

Изменил на приведенный вами фрагмент. 404 заработала, но кое-что другое связанное с comtemplate перестало работать. Так что вернул назад Lol