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 archiveeventualmente 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?).
! 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>
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.
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.