Reindirizza i vecchi URL del forum ai nuovi URL di Discourse usando permalink

Reindirizzamento degli URL del vecchio forum a quelli nuovi di Discourse utilizzando i permalink

Se siete passati da altro software per forum a Discourse utilizzando uno dei nostri script di importazione, probabilmente desiderate che tutti i risultati di ricerca di Google guadagnati continuino a puntare allo stesso contenuto. Discourse dispone di un modo integrato per gestire ciò come alternativa alla scrittura di regole nginx, utilizzando la tabella di ricerca dei permalink.

La tabella dei permalink consente di impostare due elementi: un URL da cui effettuare la corrispondenza e ciò che tale URL dovrebbe visualizzare. Ci sono alcune opzioni per definire dove l’URL dovrebbe reindirizzare. Impostate una di queste:

  • topic_id: per mostrare un argomento
  • post_id: per mostrare un post specifico all’interno di un argomento
  • category_id: per mostrare una categoria
  • tag_id: per mostrare un tag
  • user_id: per mostrare un profilo utente
  • external_url: per reindirizzare a un URL che potrebbe non appartenere alla vostra istanza di Discourse

Ad esempio, se gli URL degli argomenti del vostro forum originale assomigliavano a http://example.com/discussion/12345, e l’URL di quell’argomento dopo l’importazione è http://example.com/t/we-moved/987, potete impostare la mappatura in questo modo:

cd /var/discourse
./launcher enter app
rails c
Permalink.create(url: '/discussion/12345', topic_id: 987)

Discourse eseguirà quindi un reindirizzamento con codice di stato della risposta http 301 (spostato permanentemente) all’URL corretto per l’ID argomento 12345. Il 301 dovrebbe indurre i motori di ricerca ad aggiornare i loro record e a iniziare a utilizzare i nuovi URL.

Se volete che alcuni URL reindirizzino lontano da Discourse, potete farlo impostando external_url:

Permalink.create(url: '/discussion/12345', external_url: 'http://archived.example.com/discussion/12345')

Comportamento importante per i permalink esterni sugli URL degli argomenti

Quando viene creato un permalink external_url per un URL di argomento di Discourse (ad esempio /t/some-slug/123) per reindirizzare a un sito esterno, tenete presente:

  • l’argomento originale deve essere soft-deleted (non hard-deleted)
  • l’argomento deve appartenere a una categoria pubblica

Perché: se l’argomento è ancora attivo, Discourse lo risolve normalmente e la ricerca del permalink non viene utilizzata. Se l’argomento si trova in una categoria privata, i controlli dei permessi possono restituire 404 prima che venga applicato il reindirizzamento del permalink esterno.

Questo è particolarmente rilevante per la navigazione in-app (utenti connessi), dove le rotte possono essere richieste come JSON/XHR.

Informazioni aggiuntive

Per trovare l’ID di una sottocategoria, è possibile cercarla tramite lo slug in questo modo:

Category.find_by_slug('products').id

Per eliminare il permalink per quell’URL, fate questo:

Permalink.find_by_url("/blah").destroy

Può esserci un solo record di permalink per URL, quindi cercate semplicemente per URL.

Creazione di una mappa argomenti da MyBB a Discourse

Domande sul reindirizzamento da Discourse a WordPress

Normalizzazione dei permalink


Ultima revisione da @SaraDev il 2022-06-03T20:00:00Z

37 Mi Piace