Migrar um fórum phpBB3 para Discourse

Veja SiteSettings.permalink_redirects

Editar: ops. Normalizações de Permalink

Você quer dizer em /admin/site_settings/category/all_results procurar por permalink_redirects? Essa configuração não existe para mim.

Mas permalink_normalizations meio que funciona, usando /^forum\\/(view.*)/\\1:

  • Todos os links do phpBB começam com view, como viewtopic.php e viewforum.php. Na verdade, esses parecem ser os únicos dois URLs migrados no nosso caso, então a regex poderia ser aprimorada, ou dividida em duas para correspondência de caminho completo.
  • Então, essa regex (sintaxe sed) pega todos os URLs que começam com /forum/view e remove a parte forum/.

Agora, só precisamos redirecionar todos os /phpbb/ (nosso antigo caminho do fórum) para /forum/ no servidor web (ou Cloudflare no nosso caso) e o Discourse cuida do resto. Deveria ter encontrado isso há uns 3 anos, em vez de quebrar todos os backlinks :smiling_face_with_tear:.

Mas me diga onde esse permalink_redirects deveria estar, talvez precise de um plugin, ou fizesse parte do plugin de importação do phpBB ou algo assim?

EDIT: Funciona bem:

root@micha:~# curl -IL https://dietpi.com/phpbb/viewtopic.php?p=46083
HTTP/2 301
location: /forum/viewtopic.php?p=46083

HTTP/2 301
location: https://dietpi.com/forum/t/is-there-a-simple-launch-page-for-dietpi/11237/1
x-discourse-route: permalinks/show

HTTP/2 200
x-discourse-route: topics/show

O primeiro redirecionamento /phpbb => /forum acontece no Cloudflare via regra de redirecionamento, para manter a carga trivial longe da nossa origem. O segundo redirecionamento para o tópico real é feito no Discourse via permalink, removendo o forum/ inicial via normalização de permalink, para corresponder aos permalinks adicionados pelo plugin de importação do phpBB, que não contêm o caminho do subdiretório antigo ou novo do fórum.

Desculpe. Era isso que eu queria dizer.

Não. Apenas crie uma normalização para esse caminho.

Isso não funciona, pois o Discourse vive em /forum e não vê nenhuma solicitação para /phpbb. Com o Discourse em um subcaminho, que não corresponde ao caminho do software de fórum anterior para importar, não há como evitar fazer um redirecionamento (ou reescrever antes do proxy) para o caminho do Discourse, para que sua normalização se torne eficaz.

1 curtida

Certo. Eu perdi isso. Você precisa redirecionar /phpbb para /forum e provavelmente ainda se preocupar com normalizações.

Certo, mas isso realmente não foi muito difícil: /^forum\\/(view.*)/\\1 funciona perfeitamente para nossos antigos permalinks do phpBB. Não tenho certeza se, dependendo das configurações, há outros permalinks gerados pelo plugin de importação além de viewforum.php e viewtopic.php, como possivelmente links de perfil de usuário ou algo assim?

Seria realmente bom ter uma maneira de rolar/navegar ou classificar permalinks, para saber melhor quais esquemas de URL estão contidos. Mas fora de tópico, e depois de percorrer os padrões de pesquisa, tenho certeza de que, no nosso caso, apenas os dois acima existem.

Parece que o script faz apenas permalinks de categoria, tópico e post.

Se você quisesse criar permalinks de usuário e os perfis de usuário no sistema antigo incluem o import_id do usuário, então você poderia criá-los com um pouco de ruby no console.

1 curtida

Bom saber. E os URLs de tópico e post usam o mesmo script PHP. Então, para descartar qualquer normalização não intencional, minha regex poderia ser dividida em duas:

  1. /^forum\\/(viewforum.php\\?.*)/\\1 para categorias
  2. /^forum\\/(viewtopic.php\\?.*)/\\1 para tópicos e posts

… ou /^forum\\/(view(forum|topic).php\\?.*)/\\1, não tenho certeza se há alguma diferença marginal em termos de desempenho.

URLs de perfil são, de qualquer forma, improváveis de ter backlinks. Nós o usamos para dar aos usuários que relataram bugs ou cujas sugestões foram incluídas em nosso projeto, créditos em nossas notas de lançamento. Mas esse é um caso raro, eu acho, e os links em nossas notas de lançamento foram atualizados imediatamente quando mudamos para o Discourse.

1 curtida