Нужна помощь с перенаправлением после смены домена моего форума Discourse

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

Мне нужно, чтобы ссылки со старого домена перенаправлялись на новый. Например, ссылка вида https://olddomain.com/t/topic/89520 должна перенаправляться на https://newdomain.com/t/topic/89520.

Я слышал о использовании перенаправления 301, но мне трудно найти директорию конфигурации Nginx на моём сервере. Буду очень признателен за любые альтернативные решения или рекомендации.

Привет @Anirudh_Dutta_Gupta :wave: добро пожаловать в Meta :slight_smile:

Вы уже видели эту тему:

Спасибо, @Lilly. Я хотел бы узнать, могут ли постоянные ссылки обрабатывать также полную смену домена. Для уточнения: мы переезжаем с abc.domain1.com на xyz.domain2.com. Меняются как поддомен, так и домен. Я читал это обсуждение и хотел бы подтвердить:

Вы пытаетесь перенаправить существующую тему Discourse на внешний URL? Для этого постоянные ссылки не предназначены. Я почти уверен, что вы не можете перенаправлять ничего под /t.
Если вы хотите, чтобы посетители https://hoidap.cheng.vn/t/cach-cua-do-nu-bao-binh-don-gian/70 2 были перенаправлены на https://cunghoangdao.info, то, по-моему, лучший вариант — отредактировать сообщение и попросить людей перейти по ссылке на другой сайт.

Итак, вы настроили

Спасибо, @RGJ. Как мне настроить универсальное перенаправление? И текущий, и предыдущий форумы работают на Discourse.

Предполагая, что вы собираетесь удалить текущий форум, это обычное перенаправление Apache или nginx.

Для nginx:

server {
    server_name original.example.com;
    location / {
        rewrite ^/(.*)$ https://new.example.com/$1 permanent;
    }
}

или для Apache:

RewriteEngine On
RewriteRule ^(.*)$ https://new.example.com/$1 [R=301,L]

Я упустил тот момент, что вы переносите только Discourse, а не выполняете миграцию. Поскольку вы меняете только домен, перенаправления постоянных ссылок вам не нужны.

Изначально я так и думал, но не могу найти папку nginx ни в одном из каталогов в /etc. Не туда ли я смотрю?

Это связано с тем, что в настоящее время там установлена Discourse, где nginx работает внутри контейнера.

Самый простой способ — перенаправить старый хостимен на новый экземпляр и настроить перенаправление там. См. URL rewrite for domain change in permalinks - #7 by modius

Альтернативный вариант: удалить установку Discourse и настроить nginx на старом экземпляре.

Спасибо @RGJ за рекомендации. Я просто настроил перенаправление на уровне домена у нашего провайдера доменных имен, и это сработало. Старые ссылки теперь правильно перенаправляют на новые.

Вот метод, который я использую для полной перенастройки после смены домена. Я объединил несколько решений, предложенных на этом форуме.

В файле app.yml в конце я добавляю блоки after_web_config и after_ssl:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

  after_web_config:
    - replace:
        filename: /etc/nginx/nginx.conf
        from: /sendfile.+on;/
        to: |
          server_names_hash_bucket_size 64;
          sendfile on;
    - file:
        path: /etc/nginx/conf.d/discourse_redirect_1.conf
        contents: |
          server {
            listen 80;
            listen 443 ssl;
            server_name old-domain.com;
            return 301 $scheme://new-domain.com$request_uri;
          }
  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d old-domain.com --keylength"

## Любые пользовательские команды для выполнения после сборки
run:
  - exec: echo "Начало пользовательских команд"
  ## Если вы хотите установить адрес электронной почты в поле 'От кого' для первой регистрации, раскомментируйте и измените:
  ## После получения первого письма с регистрацией снова закомментируйте эту строку. Она должна выполниться только один раз.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Конец пользовательских команд"

Это обеспечит перенаправление старых ссылок на новый форум без проблем с SSL.