среда, 3 августа 2011 г.

Drupal 7 - Запрошенная страница не найдена / page not found (404) for all pages

Если вы вдруг заметили, что на любой странице вашего сайта вы видите "Запрошенная страница не найдена", то не стоит впадать в панику (как сделал это я:), это ни к чему хорошему не приведет.
Первая мысль, которая проносится в голове о том, что вас взломали и напакостили. Расслабьтесь, это не так, не в этот раз)

Проблема вот в чем:
hook_menu содержит информацию о url и функциях, которые ответственны за обработку при переходе на данный url. Ну, так вот, он поломался (да, и такое бывает). Можете заглянуть в таблицу menu_router в вашей базе данных и убедиться, что она пуста или содержит одну запись. Вам необходимо перестроить (обновить) все пути (url), чтобы ваш сайт снова заработал.

Решение
Необходимо вызвать функцию menu_rebuild(), вставьте ее в конец файла index.php и откройте главную страницу сайта несколько раз, если все заработало, то можете вытереть пот со лба и пойти выпить стакан холодного апельсинового сока.

Если все же сайт твердит как попугай "Запрошенная страница не найдена", то необходимо найти причину возникающего феномена и устранить.

Вспомните, вы ведь подключали/включали/отключали/изменяли какой-то модуль. Припоминайте? Значит ошибка в hook_menu этого модуля. Закомментируйте или исправьте ошибки в коде хука, а затем сделайте то, что написано выше. Сайт должен ожить, а таблица menu_router наполниться свежими данными.

Если же хук написан правильно, то проверьте кодировку файла, она должна быть UTF-8 without BOM.

Другой способ решения описан здесь