Manter o site antigo no lugar e fazer os links antigos funcionarem dentro do discourse?

Conforme sugerido, estou tentando manter meus fóruns antigos “no lugar” enquanto uso o Discourse no mesmo domínio. Consegui fazer o nginx funcionar como proxy e contornar quaisquer conflitos com os URLs do Discourse, então tudo funciona bem no carregamento inicial da página (e para fins de SEO).

Meu problema é com links para esses URLs antigos dentro do Discourse. O roteamento do aplicativo Discourse intercepta esses URLs como links internos e, portanto, resulta em 404. Tentei inúmeras maneiras de contornar isso com as ferramentas disponíveis, mas nada funciona com URLs ou no mesmo domínio. (Também não quero colocar o Discourse em uma subpasta).

Se eu pudesse adicionar ao array SERVER_SIDE_ONLY para imitar o que estou fazendo no nginx, isso deveria funcionar. Alguém tem alguma sugestão sobre como fazer isso, ou algo mais?

Isso não é nada do que esse tópico estava recomendando. Você deve iniciar seu novo fórum em um novo subdomínio e deixar o antigo para trás.

Eu acho que isso está certo. Se você realmente quiser o fórum antigo e o novo no mesmo domínio (o que, novamente, parece uma péssima ideia pelas questões que você já descreveu), você poderia concebivelmente ter outro domínio que seja um CNAME para o antigo e fazer o Discourse apontar para eles, então ele pensaria que era um servidor diferente e não tentaria lidar com esses links sozinho e quando o nginx recebesse o link, ele serviria os dados do outro domínio ou redirecionaria o navegador para o correto.

Considerei colocar o material antigo em um subdomínio archive (arriscanndo impacto no SEO), mas mesmo assim não acho que haja uma maneira de fazer o Discourse alterar o link que um usuário fornece, a não ser criar um link permanente para cada página possível. Suponho que o uso do subdomínio archive eventualmente se tornaria o padrão à medida que as pessoas soubessem sobre ele e copiassem/colassem da barra de endereços do navegador.

Se você tivesse acabado de fazer uma importação, haveria permalinks para todos eles, mas isso não é muito útil. E o tipo de coisa que alguém que ganha uma parte considerável de sua vida fazendo importações pode pensar.

A coisa mais fácil seria mover o novo fórum para um novo URL (esperançosamente você não estragaria muito o SEO ainda) ou mover o fórum antigo para outro (e perder o SEO para as coisas antigas, embora possa ser possível fazer uma normalização de permalink ou alguma mágica do NGINX que fizesse redirecionamentos). O novo site está no ar há muito tempo?

Você pode ser capaz de criar uma normalização de permalink. . . não. Acho que as normalizações de permalink funcionam apenas para permalinks e eles não podem ser externos. Poderia ser possível ter um componente de tema que encontre URLs correspondentes e os reescreva com o hostname falso/cname, mas não tenho certeza do que vai para a postagem cozida (é a URL completa com hostname, ou o processo de cozimento remove o hostname?).

Se a URL completa estiver na postagem cozida, você poderia fazer algo como o que eu faço em GitHub - literatecomputing/runners-onebox-theme: Custom oneboxes for Garmin and Strava.

1 curtida

:bulb:! Consigo lidar com isso na página 404 por meio de um script no HTML do tema…

Faço a página 404 recarregar a janela do navegador para a URL “faltando”, o que atingirá o lado do servidor. Funciona! A única desvantagem que vejo é que o redirecionamento é perceptível e você sai do aplicativo para quaisquer 404 reais (perdendo a barra lateral/cabeçalho).

<script type="text/discourse-plugin" version="0.8">
  api.onPageChange((url, title) => {
    const router = api.container.lookup('service:router');
    var is404 = document.getElementsByClassName("page-not-found");
    if (is404.length) {
        const params = new URLSearchParams(router.currentRoute.queryParams).toString();
        let q = "";
        if (params){ q = "?"+params; }
        window.location.replace(window.location.origin + url + q);
    }
  });
</script>

Eu acho que você deveria ser capaz de pegá-los no lado do cliente, como eu sugeri antes. Os links para o site antigo no HTML incluem o nome do host?

Sim, a URL completa está lá. Vou verificar a criação de um Componente de Tema, obrigado!

1 curtida

Componente de Tema criado! Ele procura por quaisquer hrefs para o hostname com um caminho que corresponda aos seus regex fornecidos, então adiciona um evento click para definir window.location para pular o roteamento interno.

1 curtida

Estou curioso, se (inline) oneboxing funciona neste cenário.

URLs do mesmo domínio são exibidas em onebox e ainda apresentam o mesmo problema de um link simples. Meu componente de tema será aplicado a quaisquer links <a> href na postagem, portanto, ele também funciona para links em onebox.

1 curtida

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.