Как перенаправить все страницы 404 на главную?

Здравствуйте,

Возможно ли автоматически перенаправлять все страницы с ошибкой 404 на главную или на другую страницу?

С уважением

Так как Discourse не использует htaccess, я не уверен, где искать решение. Любая помощь будет оценена :slight_smile:

Наверное, вы могли бы создать плагин для этого?

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

Это могло бы сработать, но я не знаю, как это сделать :confused:

Есть ли для этого какой-то плагин?

Сомневаюсь. Вы могли бы Marketplace

.htaccess в любом случае использовать не стоит, даже если перед Discourse стоит Apache2 — а его там нет.

Docker немного усложняет жизнь :wink: и я не знаю, как с этим работать. Но если хотите, вы можете поставить Nginx (или любой другой сервер/прокси-обратный прокси) перед Discourse. Тогда такая перенаправление будет довольно простой задачей. Вы можете сделать что-то вроде этого:

Но зачем вообще перенаправлять 404 на главную страницу? Если пользователь ищет что-то и вместо нужной страницы или 404 получает главную, это немного сбивает с толку. После этого тот же пользователь попробует снова, возможно, потому что он что-то сделал неправильно или на сайте возникла проблема. Это совершенно излишне, и есть причина, по которой каждый сайт должен показывать ошибку 404, а не какое-то странное перенаправление.

Я переезжаю с WordPress на Discourse. Из-за другой структуры ссылок после миграции появится огромное количество страниц 404. Я не могу настроить перенаправление для каждой из них вручную, поэтому мне нужно автоматическое решение.

Да, но это не решение. Это плохой фикс, и не более. Структура ваших URL всё равно останется сломанной, вы просто её скрываете. И нет, передать SEO-ценность таким образом нельзя :wink:

В любом случае — у вас там есть сервер. Попробуйте его использовать?

Если бы вы использовали разные поддомены для сайтов WordPress и Discourse, вы, вероятно, смогли бы настроить это на стороне сервера WordPress.

Возможно изменить page_not_found.title (изначально «Упс! Эта страница не существует или является приватной»). Жаль, что у вас нет чего-то вроде page_not_found.content, которое позволило бы подробно объяснить ситуацию.

Есть настройка администратора «Подробная 404», если это может помочь?

Этот вариант не предполагает никакого перенаправления, если я не ошибаюсь.

К чему ведут эти ссылки? Планируется ли их миграция в Discourse? Например, если эти ссылки ведут на записи блога, которые вы преобразуете в темы, вы можете создать постоянные ссылки (пермалинки): Redirect old forum URLs to new Discourse URLs using permalinks

Вы также можете переназначить эти URL-адреса на что-то другое. Предполагая, что URL-адреса имеют общий формат, вы можете использовать REGEX и команду remap для их замены:

remap [--global,--regex] FROM TO

Пример использования команды:

discourse remap --regex "\[\/?color(=[^\]]*)*]" "" # удаление тегов цвета bbcode

За исключением того, что это должно быть сделано на сервере WordPress, если вы хотите, чтобы были довольны и Google, и пользователи.

Вы можете перенаправлять все битые страницы 404 на главную страницу или другую страницу, используя функцию «Настройка».
Перейдите в раздел Настройка > Темы > Создать новую тему > назовите вашу тему, например, Перенаправление 404, и установите Базовую тему в По умолчанию.
Затем создайте новую тему > Изменить CSS/HTML. В разделе HTML создайте фрагмент JavaScript, который будет обрабатывать перенаправление.
Вставьте этот код.

<script type="text/discourse-plugin">
  api.onPageChange((url, title) => {
    // Перенаправление на главную страницу для всех страниц 404
    if (url.includes('/404')) {
      window.location.href = '/';
    }
  });
</script>

Пожалуйста, измените имя страницы в соответствии с вашими потребностями. Прочитайте это перенаправление старого URL на новый URL Discourse