Joomla 404: почему страницы не открываются и как найти причину

Ошибка:

404 Not Found

в Joomla не всегда означает, что файл или статья физически удалены.

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

Причина может находиться в нескольких уровнях:

  • неправильном URL;
  • alias материала или категории;
  • структуре меню;
  • маршрутизации Joomla;
  • настройках SEF;
  • .htaccess;
  • конфигурации Apache или Nginx;
  • стороннем компоненте;
  • изменениях после переноса;
  • старых ссылках после изменения структуры сайта.

Joomla разбирает URL по сегментам и пытается сопоставить их с маршрутом сайта и роутером компонента. Если часть пути остаётся нераспознанной, Joomla считает такой URL некорректным и возвращает 404.

Сначала определите масштаб проблемы

↑ К оглавлению

Не начинайте сразу менять .htaccess.

Проверьте несколько URL:

  • главную страницу;
  • другую статью;
  • страницу категории;
  • проблемный материал;
  • пункт меню;
  • административную панель.

Например:

главная → работает
категория → работает
одна статья → 404

и:

главная → работает
все внутренние страницы → 404

— это совершенно разные ситуации.

Если сломана только одна страница, причина вероятнее находится в её маршруте, alias, menu item или состоянии контента.

Если после включения SEF перестали открываться почти все внутренние URL — гораздо важнее проверить rewriting.

Проверьте сам URL

↑ К оглавлению

Сначала убедитесь, что открываете текущий адрес страницы.

404 часто возникает после:

  • переименования alias;
  • переноса материала в другую категорию;
  • изменения пункта меню;
  • изменения структуры меню;
  • отключения старого компонента;
  • миграции сайта;
  • изменения SEF-настроек.

Например, раньше материал мог находиться по адресу:

/services/site-repair

а после изменения структуры Joomla строит:

/support/site-repair

Старая ссылка продолжит вести на 404, если для неё нет корректного перенаправления.

Поэтому полезно сначала открыть материал через сам интерфейс Joomla и сравнить текущий URL со старым.

Проверьте, существует ли сам материал

↑ К оглавлению

Убедитесь, что объект, на который ведёт ссылка:

  • существует;
  • опубликован;
  • находится в доступной категории;
  • не перемещён в корзину;
  • доступен текущему пользователю.

Не ограничивайтесь только статьёй.

Маршрут Joomla может зависеть также от:

  • категории;
  • menu item;
  • родительского menu item;
  • компонента.

Если один из элементов маршрута изменился, старый URL может перестать соответствовать новой структуре.

Проверьте alias

↑ К оглавлению

Alias участвует в формировании SEF URL.

Например:

/article-title

может строиться из alias материала или элемента маршрута.

После изменения alias старый адрес не обязан продолжать работать автоматически.

Проверьте:

  • alias материала;
  • alias категории;
  • alias пункта меню;
  • родительские menu items.

Особенно если 404 появилась сразу после изменения названия или структуры сайта.

Проверьте пункт меню

↑ К оглавлению

В Joomla меню — это не только визуальная навигация.

Menu item участвует в построении маршрута страницы.

Актуальная документация Joomla описывает, что при разборе SEF URL router последовательно сопоставляет сегменты пути с alias пунктов меню и использует найденный Itemid для определения контекста страницы.

Поэтому ситуация:

удалили пункт меню
↓
старый URL начал давать 404

может быть вполне связанной.

Проверьте:

  • существует ли нужный menu item;
  • опубликован ли он;
  • какой component/view он открывает;
  • не поменялся ли его alias;
  • не изменился ли родительский пункт.

Если 404 появилась после включения SEF

↑ К оглавлению

Очень характерный сценарий:

обычные URL → работали
↓
включили SEF / URL rewriting
↓
внутренние страницы → 404

В Joomla настройки красивых URL и серверный rewriting — связанные, но не одинаковые вещи.

Joomla может формировать SEF URL сама, а удаление index.php из адреса требует корректной настройки веб-сервера. Для Apache Joomla официально описывает использование .htaccess и mod_rewrite; если rewriting настроен неправильно, внутренние URL могут перестать работать.

Проверьте, работает ли URL с index.php

↑ К оглавлению

Это полезный диагностический тест.

Если адрес вида:

https://example.com/index.php/example-page

работает, а:

https://example.com/example-page

возвращает 404, область поиска уже сильно сузилась.

Очень вероятно, что Joomla сама умеет разобрать маршрут, а веб-сервер не передаёт clean URL в Joomla так, как ожидается.

Тогда нужно проверять:

  • URL Rewriting;
  • .htaccess;
  • mod_rewrite;
  • VirtualHost;
  • Nginx rules.

Не нужно в этот момент менять материалы или базу данных.

Apache: проверьте .htaccess

↑ К оглавлению

Стандартная поставка Joomla содержит:

htaccess.txt

Для Apache его обычно используют как основу активного:

.htaccess

Joomla отдельно предупреждает, что настройки должны соответствовать конкретному серверному окружению.

Если 404 возникла после:

  • включения URL Rewriting;
  • переноса сайта;
  • изменения .htaccess;
  • обновления серверной конфигурации,

сравните файл с последней рабочей версией.

Не заменяйте существующий .htaccess вслепую — в нём могут находиться дополнительные правила сайта.

Проверьте mod_rewrite

↑ К оглавлению

Для Apache удаление index.php из URL обычно опирается на rewriting.

Если URL с index.php работает, а без него — нет, проверьте:

  • загружен ли mod_rewrite;
  • разрешены ли .htaccess overrides;
  • применяется ли файл .htaccess;
  • корректен ли VirtualHost.

Официальная Joomla-документация отдельно указывает, что при запрещённых .htaccess overrides файл может игнорироваться, а настройка rewriting не даст ожидаемого результата.

Проверьте RewriteBase

↑ К оглавлению

Особенно это важно, если Joomla установлена не в корне домена.

Например:

https://example.com/joomla/

и сайт физически работает из подкаталога.

Тогда настройки, рассчитанные на:

/

могут не соответствовать реальному расположению.

В официальной инструкции Joomla RewriteBase отдельно упоминается для Joomla, установленной в подпапке.

Не меняйте его просто потому, что увидели строку в интернете.

Сначала определите фактический DocumentRoot и путь установки.

Nginx не использует .htaccess

↑ К оглавлению

Если сайт работает на Nginx:

.htaccess

вообще не управляет маршрутизацией.

Для Nginx rewriting задаётся в конфигурации сервера.

Joomla имеет отдельные рекомендации по SEF URL для Nginx именно потому, что механизм отличается от Apache.

Поэтому при 404 сначала выясните:

Apache
или
Nginx

и только затем редактируйте соответствующую конфигурацию.

Если 404 появилась после переноса сайта

↑ К оглавлению

После миграции файлы и база могут быть полностью исправны, но серверное окружение — другим.

Например:

старый сервер → Apache
новый сервер → Nginx

или:

старый сайт → корень домена
новый сайт → подкаталог

Тогда старые rewrite rules могут больше не соответствовать архитектуре.

Проверяйте:

  1. фактический веб-сервер;
  2. DocumentRoot;
  3. путь Joomla;
  4. настройки SEF;
  5. active rewrite configuration;
  6. старые и новые URL.

Не импортируйте базу повторно только из-за 404.

Если 404 только у одной категории

↑ К оглавлению

Проверьте:

  • существует ли категория;
  • опубликована ли она;
  • существует ли menu item;
  • не изменён ли alias;
  • корректен ли родительский маршрут;
  • открываются ли материалы категории напрямую.

Если остальные Joomla URL работают, глобальные настройки веб-сервера становятся менее вероятной причиной.

Диагностику нужно вести от узкого симптома.

Если 404 только у одной статьи

↑ К оглавлению

Проверьте сам материал и маршрут к нему.

Особенно:

  • состояние публикации;
  • alias;
  • категория;
  • связанный menu item;
  • старую ссылку;
  • текущую ссылку, которую Joomla генерирует сама.

Не исправляйте .htaccess, если остальные сотни SEF URL работают нормально.

Если после изменения меню появились массовые 404

↑ К оглавлению

Поскольку Joomla использует menu items при формировании маршрутов, реорганизация меню может изменить URL существующих страниц.

Например:

/services/repair

может стать:

/support/services/repair

после изменения родительской структуры.

В этом случае нужно:

  • определить старые URL;
  • определить новые canonical URL;
  • проверить внутренние ссылки;
  • настроить нужные 301 redirects.

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

Не путайте Joomla 404 и серверную 404

↑ К оглавлению

Это важное различие.

404 может вернуть:

Веб-сервер

Например Nginx или Apache вообще не передал запрос Joomla.

Или:

Joomla

Запрос дошёл до index.php, но router не смог сопоставить путь с существующим маршрутом.

В Joomla router действительно возвращает 404, когда путь содержит нераспознанные сегменты.

Эти два случая требуют разной диагностики.

Как отличить серверную 404 от Joomla 404

↑ К оглавлению

Сравните:

  • оформление error page;
  • response headers;
  • server logs;
  • PHP/Joomla logs;
  • поведение аналогичных URL.

Полезен и тест с:

/index.php/...

Если через index.php Joomla открывает нужную страницу, а clean URL не работает, сначала исследуйте rewriting.

Если и Joomla route не распознаёт страницу, ищите проблему уже в menu/component/alias routing.

Проверьте сторонний компонент

↑ К оглавлению

У каждого Joomla-компонента может быть собственная логика router.

Поэтому ситуация:

обычные статьи → работают
магазин/каталог → 404

может быть связана именно с компонентом.

Проверьте:

  • обновлялся ли компонент;
  • менялись ли его настройки SEF;
  • работает ли его menu item;
  • изменялись ли категории или aliases;
  • что говорит документация конкретного extension.

Не отключайте глобальный SEF всего сайта только потому, что маршруты одного расширения сломались.

Если 404 появилась после обновления расширения

↑ К оглавлению

Сильный диагностический сигнал:

до обновления component URLs → работали
после обновления → 404

Проверьте:

  • changelog расширения;
  • настройки router/SEF;
  • menu items;
  • aliases;
  • кеш;
  • совместимость версии расширения с Joomla.

Если проблема воспроизводится только внутри этого компонента, Joomla core и серверные rewrite rules могут быть совершенно исправны.

Очистите кеш только после определения гипотезы

↑ К оглавлению

После изменения:

  • menu items;
  • aliases;
  • SEF settings;
  • extensions

очистка кеша может быть полезным контрольным действием.

Но:

404 → очистить всё

не является диагностикой.

Если .htaccess вообще не работает, Joomla cache это не исправит.

Если URL ведёт на удалённый материал — тоже.

Проверьте внутренние ссылки

↑ К оглавлению

После изменения структуры сайта старые URL могут оставаться:

  • в меню;
  • в материалах;
  • в модулях;
  • в HTML;
  • в sitemap;
  • во внешних ссылках.

Нужно определить:

страница реально отсутствует

или:

страница существует, но ссылка устарела

Во втором случае исправляется источник URL и, при необходимости, добавляется redirect.

Не перенаправляйте все 404 на главную

↑ К оглавлению

Это популярное, но плохое «исправление».

Правило:

любая 404 → /

скрывает реальные битые URL и мешает понять, что произошло.

Если старая страница имеет прямую новую замену — делайте адресный redirect.

Если контента больше нет и эквивалента нет — корректный 404 может быть правильным ответом.

Используйте 301 только при реальном новом адресе

↑ К оглавлению

Например:

/old-service

реально заменена на:

/services/new-service

Тогда логичен:

301

Но нельзя массово отправлять любые неизвестные URL на случайную страницу.

Redirect должен отражать реальное перемещение контента.

Учитывайте новые правила Joomla 5.x

↑ К оглавлению

Современный router Joomla строже относится к некорректным URL, чем старые версии.

С Joomla 4 нераспознанный остаток пути приводит к 404. В Joomla 5.3 router также получил механизм более мягкой обработки некоторых формально неправильных URL: такие маршруты могут помечаться как tainted, после чего SEF plugin способен построить корректный URL и сделать redirect. Это не означает, что любой неправильный URL автоматически восстановится.

Поэтому после обновления старые нестандартные ссылки стоит проверять отдельно.

Не чините URL вручную в ядре Joomla

↑ К оглавлению

Routing реализован Joomla core и routers компонентов.

Не стоит исправлять 404 редактированием:

libraries/...

или core router-файлов.

Следующее обновление затрёт изменение, а причина останется.

Если проблема связана со сторонним extension — исправление должно находиться в нём или его настройках.

Если с сервером — в server config.

Если с alias/menu — в Joomla content structure.

Короткий порядок диагностики Joomla 404

↑ К оглавлению

Если Joomla показывает 404:

  1. открыть проблемный URL;
  2. проверить другие страницы;
  3. понять: одна страница или массовая проблема;
  4. сравнить старый и текущий URL;
  5. проверить материал, категорию и alias;
  6. проверить menu item и родительскую структуру;
  7. проверить настройки SEF;
  8. проверить URL с index.php;
  9. определить Apache или Nginx;
  10. для Apache проверить .htaccess и rewriting;
  11. для Nginx проверить server routing;
  12. если проблема только в extension — проверить его router;
  13. после миграции сравнить старое и новое окружение;
  14. исправить конкретную причину;
  15. проверить старые URL и нужные redirects;
  16. повторно пройти внутренние ссылки.

Чего не стоит делать

↑ К оглавлению

При Joomla 404 не стоит сразу:

  • переустанавливать Joomla;
  • восстанавливать всю базу;
  • заменять .htaccess случайным файлом из интернета;
  • включать и выключать все SEF-настройки подряд;
  • менять aliases массово;
  • удалять меню;
  • редактировать Joomla core router;
  • отключать все расширения одновременно;
  • перенаправлять любые 404 на главную;
  • менять Nginx через .htaccess;
  • считать любой 404 проблемой хостинга.

Сначала определите уровень:

старый URL
↓
server rewrite
↓
Joomla router
↓
menu route
↓
component
↓
content

и найдите точное место, на котором маршрут перестаёт распознаваться.

Частые вопросы

Почему Joomla показывает 404, хотя статья существует?

Частая причина — URL больше не соответствует текущему маршруту страницы. Проверьте alias материала и категории, menu item, структуру меню и фактический URL, который Joomla сейчас генерирует.

Почему после включения ЧПУ все внутренние страницы Joomla дают 404?

Если проблема появилась именно после включения URL Rewriting, проверьте настройки веб-сервера. Для Apache важны mod_rewrite и .htaccess; для Nginx правила задаются в конфигурации самого сервера.

Почему URL с index.php работает, а без него — 404?

Это сильный признак проблемы именно с server-side rewriting. Joomla получает маршрут через index.php, но clean URL не передаётся приложению корректно.

Может ли изменение меню вызвать 404?

Да. Joomla использует menu items и их aliases при построении и разборе SEF URL, поэтому изменение структуры меню может изменить маршруты страниц.

Нужно ли перенаправлять все страницы 404 на главную?

Нет. Если у старой страницы есть конкретная новая замена, настройте redirect на неё. Если эквивалента нет, корректный 404 обычно лучше, чем бессмысленный redirect на главную.

Нужна помощь с Joomla?

Разберу причину ошибки 404 в Joomla, проверю маршрутизацию, SEF, меню, alias и конфигурацию веб-сервера, а затем проверю нужные URL после исправления.

↑ К оглавлению