Как отключить редирект на страницу ошибки 404 и вместо этого отображать ее содержимое?

Как можно отрисовать страницу 404, не выполняя редирект, если страницы /news/123 не существует, при этом оставаясь на текущем URL?
  • 7 ноября 2023 г. 8:21
Ответы на вопрос 2
Чтобы отключить редирект на страницу 404 и отображать ее содержимое, необходимо внести изменения в настройки сервера. Давайте рассмотрим примеры для Apache и Nginx.

Для сервера Apache можно использовать файл .htaccess или правки в конфигурационном файле, чтобы отключить редирект на страницу ошибки 404. В файле .htaccess в корневой директории вашего сайта добавьте следующую строку:

```
ErrorDocument 404 /404.html
```

Это указывает серверу Apache отобразить файл 404.html, когда возникает ошибка 404. Замените 404.html на нужную вам страницу 404.

Для сервера Nginx в конфигурационном файле добавьте следующий блок:

```
error_page 404 /404.html;

location = /404.html {
    internal;
    root /path/to/your/website;    
}
```

Это указывает серверу Nginx использовать файл 404.html при ошибках 404. Укажите правильный путь к файлу 404.html в поле `root`.

Чтобы отрисовать страницу 404 без выполнения редиректа и оставаться на текущем URL, вам понадобится использовать серверный язык программирования, такой как PHP или JavaScript. Вам нужно будет создать страницу с содержимым, которое вы хотите отобразить, и настроить сервер таким образом, чтобы он обрабатывал запросы на несуществующие страницы через эту страницу.

Например, в PHP вы можете создать файл с именем 404.php со следующим содержимым:

```php
<?php
// Задаете нужный заголовок ответа для 404 ошибки
http_response_code(404);
?>

<!DOCTYPE html>
<html>
<head>
    <title>Страница не найдена</title>
</head>
<body>
    <h1>404 Страница не найдена</h1>
    <p>Извините, запрошенная страница не существует.</p>
</body>
</html>
```

В этом примере мы устанавливаем заголовок ответа для ошибки 404 с помощью функции `http_response_code(404)`, а затем формируем содержимое страницы.

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

Обратите внимание, что для точной настройки ваших серверов и конкретных требований может потребоваться дополнительная информация или помощь специалиста.
Можно сделать с помощью createError():

const { params: { postSlug, categorySlug } } = useRoute()

const path = `/${categorySlug}/${postSlug}`

const post = await queryContent(path).locale(locale.value).findOne()

if (!post) {
  throw createError({
    statusCode: 404,
    fatal: true,
  })
}

См. документацию. Издесь про Error страницу, которая будет показываться для всего, что будет содержать параметр fatal: true.
Похожие вопросы