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 :
Permalink.create(url: '/discussion/12345', external_url: 'http://archived.example.com/discussion/12345')
Informazioni aggiuntive
Per trovare l’ID di una sottocategoria, puoi cercarlo tramite lo slug in questo modo:
Category.find_by_slug('products').id
Per eliminare il permalink per quell’URL, fai questo:
Permalink.find_by_url("/blah").destroy
Può esserci un solo record di permalink per URL, quindi cerca semplicemente per URL.
Creazione di una mappa di argomenti da MyBB a Discourse
Dan Dascalescu:
Ho appena creato una mappa di argomenti da MyBB a Discourse automaticamente, utilizzando lo script di migrazione.
MyBB era impostato per utilizzare URL SEO-friendly senza ID al loro interno. Ora, ad esempio, quando navigo su /thread-foo-bar, nginx reindirizza a /t/foo-bar/12. Ecco come ho fatto:
Applica una patch all’importer per produrre righe che finiscono per creare un file di mappa da utilizzare per il modulo map di nginx. Per l’importer MyBB, ho aggiunto questo codice in create_posts :
parent = topic_lookup_from_imported_post_id(m['first_post_id'])
if parent
puts "\nXXX #{m['topic_id']}: #{parent[:topic_id]},"
end
Dopo di che, ho cercato le righe che iniziano con XXX, ho rimosso XXX e ho reso il file un oggetto JSON, che ho incollato in questo script . Modifica gli URL per i tuoi forum, esegui lo script e il suo output sarà una serie di righe di mappa nginx. L’ho salvato come /etc/nginx/mybb2discourse.map.
Configura nginx per “eseguire altri siti web sulla stessa macchina di Discourse” , apportando le seguenti modifiche al file di configurazione nginx (/etc/nginx/conf.d/discourse.conf) per puntare nginx al file di mappa:
inserisci questo all’inizio del file:
map_hash_bucket_size 128;
map_hash_max_size 50000; # potrebbe essere necessario aumentarlo
map $uri $new {
include /etc/nginx/mybb2discourse.map;
}
quindi nella sezione server, aggiungi:
if ($new) {
rewrite ^ $new permanent;
}
Completa i passaggi di ricaricamento di nginx e ricostruzione del container dalla fine del post Configura nginx… collegato sopra.
Sarebbe fantastico se qualcuno più esperto di Ruby applicasse una patch all’importer per produrre la mappa degli ID argomento (o ancora meglio, la mappa nginx direttamente).
Domande sul reindirizzamento da Discourse a WordPress
https://meta.discourse.org/t/discourse-to-wordpress-redirect-questions/87031
Normalizzazione dei Permalink
Danny Goodall:
Volevo solo tornare su questo per menzionare alcune delle insidie che ho trovato e forse lasciare delle briciole di pane per i futuri viaggiatori, perché ho trovato questo infernalmente difficile da debuggare.
Escaping nella stringa di normalizzazione dei permalink
Il formato della stringa di normalizzazione dei permalink ha due componenti
la stringa dell’Espressione Regolare
la stringa di Sostituzione
Appaiono, uno subito dopo l’altro, nella stringa di normalizzazione dei permalink in questo modo
Permalink Normalization
Espressione Regolare Sostituzione
<-------------------------><-------------
/(this)reallyis(intuitive)/\\1reallyisn't\\2
È importante notare che gli slash vengono trattati in modo diverso nelle diverse parti della stessa stringa.
Uno slash (e altri caratteri regex) nella parte dell’Espressione Regolare della stringa deve essere escapato, tuttavia, gli slash non necessitano di essere escapati nella parte di Sostituzione della stessa stringa e verranno invece trattati letteralmente.
Il Formato delle stringhe URL in entrata
In secondo luogo, e questo mi ha richiesto un po’ di tempo per capirlo, corrispondi all’URL come una descrizione del percorso relativo dalla radice, ma non riceverai il / come prima parte della stringa.
Ad esempio, se l’URL utilizzato dal tuo vecchio forum fosse simile a questo…
http://oldforum.com/chat/the-topic-title/post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1
…allora l’URL su cui l’espressione regolare nella tua normalizzazione dei permalink corrisponderà sarà simile a questo…
chat/topic-title/post/d9aa09c3-19bd-4c6e-9d8d-a8f1008000a1
cioè una descrizione del percorso dalla radice ma senza lo slash / iniziale. (Suppongo che la tua esperienza possa variare a seconda della struttura degli URL che stai reindirizzando, ma non credo).
Esempi
Ecco alcuni esempi dal mio progetto di migrazione
CATEGORY_LINK_NORMALIZATION = '/(cat)\\/(.*?)([#\\?].*)?$/cat/\\2'
POST_LINK_NORMALIZATION = '/chat\\/(.*?)\\/(post)\\/(.+?)([#\\?].*)?$/post/\\3'
TOPIC_LINK_NORMALIZATION = '/(chat)\\/(.*?)([#\\?].*)?$/topic/\\2'
Il Processo
L’URL Vecchio è come suona: l’URL dell’elemento nel vecchio sistema.
La normalizzazione del permalink (registrata nell’impostazione di sistema permalink_normalizations) prenderà l’URL in entrata (senza lo slash / iniziale) e applicherà la corrispondenza regex. L’URL normalizzato risultante viene quindi utilizzato per corrispondere al Testo Corrispondenza URL inserito nella schermata /admin/config/permalinks.
Ultima revisione di @SaraDev in data 2022-06-03T20:00:00Z