Странное поведение hook_menu

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

Аватар пользователя SuperSonic45 SuperSonic45 4 декабря 2013 в 18:34

Здравствуйте.

Достался на поддержку сайт на Drupal 5 с самописным модулем и вот что-то я никак не могу до конца понять поведение в этом модуле hook_menu.

Итак, на сайте есть страница с описанием авто (сайт дилера), со ссылкой, например, /avto/punto. Код hook_menu:

                        $items[] = array('path' => $path,
                        'title' => $model,
                        'title_show' => $model_title,
                        'access' => user_access('access content'),
                        'weight' => $key,
                        'callback' => 'models_model_overview',
                        'callback arguments' => array($term, $node),
                        'type' => MENU_NORMAL_ITEM,
                        'suffix' => theme("models_menu_box", $term, $i),
                        );                     

Тут для каждой модели свой $path, $model и т.д. Причём для модели punto переменная $path имеет вид avto/punto, т.е. никаких лишних слэшей или знаков процента нет.

Проблема состоит в том, что если написать, например, /avto/punto/blablabla, то вместо ошибки 404 загружается страница с описанием авто (/avto/punto), т.е. идёт коллбэк функции models_model_overview. Больше в качестве коллбэка эта функция нигде не прописана.

Судя по документации в данном случае при переходе по пути /avto/punto/blablabla должна появляться ошибка 404.

Я понимаю, что можно просто добавить ещё пункт с path содержащим в конце знак процента, но есть ещё пункты типа /avto/punto/colors, которые загружают свою страницу (с другой функцией в качестве коллбэка).

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

Помогите, пожалуйста.

Комментарии

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 4 декабря 2013 в 18:51

"SuperSonic45" wrote:
Проблема состоит в том, что если написать, например, /avto/punto/blablabla, то вместо ошибки 404 загружается страница с описанием авто (/avto/punto), т.е. идёт коллбэк функции models_model_overview. Больше в качестве коллбэка эта функция нигде не прописана.

Это нормальное поведение

Аватар пользователя drupby drupby 4 декабря 2013 в 19:07

по идее это решается с помощью link rel="canonical" и хедером ответа Link с указанием канонического урла , не знаю правда как с этим дела обстоят в пятерке

Аватар пользователя SuperSonic45 SuperSonic45 5 декабря 2013 в 10:20

RxB wrote:
"SuperSonic45" wrote:
Проблема состоит в том, что если написать, например, /avto/punto/blablabla, то вместо ошибки 404 загружается страница с описанием авто (/avto/punto), т.е. идёт коллбэк функции models_model_overview. Больше в качестве коллбэка эта функция нигде не прописана.

Это нормальное поведение

Получается, что на сайте есть бесконечное количество одинаковых страниц, что же тут нормального? Да и поисковикам это очень не нравится.

drupby wrote:
по идее это решается с помощью link rel="canonical" и хедером ответа Link с указанием канонического урла , не знаю правда как с этим дела обстоят в пятерке

Я не совсем понял, опишите, пожалуйста, подробнее.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 5 декабря 2013 в 12:47

"SuperSonic45" wrote:
Получается, что на сайте есть бесконечное количество одинаковых страниц, что же тут нормального? Да и поисковикам это очень не нравится.

У вас SEO-головного мозга.

Аватар пользователя SuperSonic45 SuperSonic45 5 декабря 2013 в 13:34

Это не у меня, а у заказчика, хотя я тоже считаю, что если страницы на сайте нет, то должна выводиться ошибка 404, а не подгружаться вместо неё другая страница, что, как минимум, неожиданно для пользователя.

Кстати, я обнаружил, что такая фигня по всему сайту, т.е. я так понимаю, что это проблема в самом Drupal. В панели управления я не нашёл какого-либо управления подобным функционалом. Подскажите, пожалуйста, куда копать?

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 5 декабря 2013 в 14:41

"SuperSonic45" wrote:
Подскажите, пожалуйста, куда копать?


Во-первых, копайте в сторону апгрейда на 6/7
Во-вторых, если очень хочется - воспользуйтесь поиском, посмотрите модули для шестёрки и перепишите их на пятёрку

Аватар пользователя SuperSonic45 SuperSonic45 5 декабря 2013 в 16:22

RxB wrote:

Во-первых, копайте в сторону апгрейда на 6/7

Мне нужно решение для пятой версии.

RxB wrote:

Во-вторых, если очень хочется - воспользуйтесь поиском, посмотрите модули для шестёрки и перепишите их на пятёрку

Т.е. если я их все перепишу, то проблема исчезнет?

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 5 декабря 2013 в 16:45

"SuperSonic45" wrote:
Т.е. если я их все перепишу, то проблема исчезнет?

Проблемы нет, точнее она только у вас и ещё у некоторых одержимых SEO.
Но вполне лечится, если не заболевание мозга, то хотя бы отдача 404 в друпале возможна

Аватар пользователя SuperSonic45 SuperSonic45 5 декабря 2013 в 17:07

Не знаю как для вас, но если бы мне, к примеру, дали номер квартиры 211, а я прихожу, звоню в дверь, мне открывают, я вхожу внутрь, но вдруг обнаруживаю, что это вообще другая квартира, то я бы, как минимум, впал бы в ступор.
Уважаемый RxB, не могли бы вы поделиться вашим способом лечения?

Аватар пользователя drupby drupby 6 декабря 2013 в 2:23

"SuperSonic45" wrote:
Не знаю как для вас, но если бы мне, к примеру, дали номер квартиры 211, а я прихожу, звоню в дверь, мне открывают, я вхожу внутрь, но вдруг обнаруживаю, что это вообще другая квартира, то я бы, как минимум, впал бы в ступор.

"SuperSonic45" wrote:
/avto/punto/blabla, то вместо ошибки 404 загружается страница с описанием авто (/avto/punto)

а если все таки объяснить заказчику , что проблемы надо решать по мере их возникновения , а не из seo баек

когда у заказчика в индексе появятся страницы /avto/punto/blabla пускай решает свои вопросы путем обращения к людям ,которые смогут решить его проблемы

Аватар пользователя SuperSonic45 SuperSonic45 6 декабря 2013 в 10:28

Я, собственно, поэтому и прошу помощи, потому что в индексе появились эти левые страницы и их полно, а я никак не могу понять почему Друпал не отдаёт 404-ую ошибку, вроде бы код правильный.