Redirezionamento di URL di forum vecchi a URL di Discourse nuovi usando permalink
Se sei passato da un altro software per forum a Discourse utilizzando uno dei nostri script di importazione, allora probabilmente vuoi che tutti i tuoi risultati di ricerca Google guadagnati duramente continuino a puntare allo stesso contenuto. Discourse ha un modo integrato per gestire questo per te come alternativa alla scrittura di regole nginx, utilizzando la tabella di ricerca dei permalink.
La tabella dei permalink ti consente di impostare due cose: un URL da corrispondere e cosa dovrebbe mostrare quell’URL. Ci sono alcune opzioni per definire dove l’URL dovrebbe reindirizzare. Imposta 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
external_url: per reindirizzare a un URL che potrebbe non appartenere alla tua istanza Discourse
Ad esempio, se gli URL degli argomenti del tuo forum originale fossero simili a http://example.com/discussion/12345, e l’URL di quell’argomento dopo l’importazione fosse http://example.com/t/we-moved/987, allora puoi 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 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 iniziare a utilizzare i nuovi URL.
Se vuoi che alcuni URL reindirizzino fuori da Discourse, puoi farlo impostando external_url:
È possibile archiviare la regola di riscrittura direttamente nel cluster Docker di Discourse? C’è un web server che si occupa di http e ssl, posso aggiungere qualcosa lì?
Non vedo come possa funzionare dato che nginx non conosce i nuovi ID degli argomenti. Gli ID di /threads devono essere convertiti nell’ID dell’argomento di Discourse.
Se chiamo /threads/name.1234, viene riscritto in /t/name e poi mi mostra il post corretto, l’ID non viene utilizzato in quel momento, l’ho appena testato.
Probabilmente solo quando sei fortunato e Discourse e il tuo vecchio forum generano gli stessi slug (e lo slug non inizia con un numero), ma probabilmente è abbastanza buono.
Se vuoi cambiare NGINX come suggerisci, puoi guardare il template web in discourse_docker per vedere come cambiare la configurazione nginx all’interno del container. Ecco un esempio:
No. Lo aggiungerai al tuo app.yml e verrà applicato ad ogni ricompilazione.
Per risparmiare tempo nei test potresti:
cd /var/discourse
./launcher enter app
apt update
apt-get install -y vim nano
Quindi usa vim o nano per modificare ciò che vuoi vedere che faccia ciò che pensi (e risparmia 10-20 minuti per ricompilazione). Puoi riavviare nginx con sv restart nginx.
Nessuna delle opzioni precedenti è stata testata, ma dovrebbe essere vicina.