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

Прислано: poe

вт, 28/08/2007 - 14:45

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

Сайт: hutorov.net

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано edhel в вт, 28/08/2007 - 15:13.

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

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


Опубликовано poe в вт, 28/08/2007 - 16:17.

Ого! А я думал это моя ошибка.
Вот же я здесь, например, ввожу: http://drupal.ru/node/6666666666
И все путем - попадаю на страницу 404.

А где взять этот хук _init?


Опубликовано edhel в вт, 28/08/2007 - 16:21.

Ща смотрю по разным сайтам - где как... где node/N ошибку дает, а где не дает....


Опубликовано poe в вт, 28/08/2007 - 19:12.

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

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


Опубликовано poe в ср, 29/08/2007 - 16:22.

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

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


Опубликовано edhel в ср, 29/08/2007 - 16: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 в чт, 30/08/2007 - 12:32.

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


Опубликовано edhel в чт, 30/08/2007 - 12:38.

Обновитесь просто до 5.2.


Ссылки партнёров