Загрузка данных


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».