1. Сначала понять, кто редиректит — nginx или движок
На сайте два «слоя»: nginx (веб-сервер) и CMS (движок, который рисует страницы). Редирект /randomxyz → / может делать любой из них. Как понять:
Несуществующие *.html уже отдают 404, а /randomxyz (без .html) — 301 на главную. Такая разница чаще всего значит, что редирект делает именно nginx (для не-.html путей), а .html он отдаёт движку, и тот честно возвращает 404.
Если окажется, что nginx просто проксирует всё в движок (index.php/ok.php) — тогда правит движок, и нужен разработчик CMS. Но начать стоит с nginx.
2. Где лежит конфиг
Обычно один из:
/etc/nginx/nginx.conf
/etc/nginx/sites-available/vega-autogas.ru (или conf.d/*.conf)
/etc/nginx/vhosts/... (на панелях типа ISPmanager)
Найти конфиг именно этого сайта:
grep -rl "vega-autogas" /etc/nginx/
3. Что искать — «виновники» редиректа на главную
В server { ... } этого сайта ищите строки такого рода (любая из них даёт «мягкий 404»):
# 1) классический костыль — «если файла нет, кинуть на главную»
if (!-e $request_filename) {
rewrite ^ / permanent; # или redirect
}
# 2) прямой редирект-заглушка
location / {
return 301 /; # или return 301 https://www.vega-autogas.ru/;
}
# 3) fallback в try_files на главную
try_files $uri $uri/ /; # последний аргумент "/" = уводит на главную
# 4) подмена 404 на главную с кодом 200
error_page 404 = /; # знак "=" без кода → отдаёт 200
error_page 404 =200 /; # явно 200 — тоже плохо
Любую из этих конструкций нужно убрать или переписать.
4. На что менять (правильные варианты)
Вариант А — всё отдавать движку, пусть он сам вернёт 404 (если сайт работает через index.php/ok.php):
location / {
try_files $uri $uri/ /index.php?$args; # НЕ "/", а во фронт-контроллер
}
Движок уже умеет отдавать 404 (для .html он это делает) — так он вернёт 404 и для остальных адресов.
Вариант Б — своя страница 404 с правильным кодом (если хотите красивую страницу ошибки):
error_page 404 /404.html; # без "=" и без "=200" — код останется 404
location = /404.html {
internal; # чтобы её нельзя было открыть напрямую
}
Здесь ключевой момент: error_page 404 /404.html; сохраняет код 404, а error_page 404 =200 ... или = / — ломает его на 200. Нам нужен именно первый вид.
Обязательно удалить блок if (!-e $request_filename) { rewrite ^ / ... } — это главный источник редиректа на главную.
5. Чего делать НЕ надо
❌ return 301 / для несуществующих — это и есть проблема.
❌ error_page 404 =200 /index.html — маскирует ошибку под успешную страницу.
❌ редиректить неизвестные адреса на главную «чтобы посетитель не потерялся» — для SEO это вредно; правильно отдать 404 (можно красивую, в дизайне сайта).
6. Применить и проверить
nginx -t # проверка синтаксиса — должно быть "syntax is ok"
systemctl reload nginx # или: nginx -s reload
Проверка (должно стать 404, без 301):
curl -I https://www.vega-autogas.ru/proverka404
# ожидаем в первой строке: HTTP/1.1 404 Not Found
Или в Яндекс.Вебмастере → Инструменты → Проверка ответа сервера: ввести https://www.vega-autogas.ru/proverka404 → должно показать 404, а не «301 → 200».