Reindirizzare vecchi URL del forum a nuovi URL di Discourse usando permalink

<div data-theme-toc="true"> </div>

## Reindirizzamento degli URL del vecchio forum ai nuovi URL di Discourse utilizzando i permalink

Se sei passato da un altro software per forum a Discourse utilizzando [uno dei nostri script di importazione](https://github.com/discourse/discourse/tree/main/script/import_scripts), probabilmente vuoi che tutti i tuoi risultati di ricerca Google guadagnati continuino a puntare allo stesso contenuto. Discourse dispone di un modo integrato per gestire questo aspetto come alternativa alla scrittura di regole nginx, utilizzando la **tabella di ricerca permalink**.

La tabella permalink ti consente di impostare due cose: un URL da confrontare e cosa dovrebbe mostrare tale URL. Ci sono alcune opzioni per definire dove deve reindirizzare l'URL. 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
* **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 tua istanza Discourse

Ad esempio, se gli URL degli argomenti del tuo forum originale erano simili a `http://example.com/discussion/12345`, e l'URL per quell'argomento dopo l'importazione è `http://example.com/t/we-moved/987`, puoi configurare 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 di risposta http 301](http://en.wikipedia.org/wiki/HTTP_301) (spostato permanentemente) all'URL corretto per l'ID argomento 12345. Il 301 dovrebbe far sì che i motori di ricerca aggiornino i loro record e inizino a utilizzare i nuovi URL.

Se desideri che alcuni URL reindirizzino lontano 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 cercarla tramite lo slug in questo modo:

Category.find_by_slug(‘products’).id


Per eliminare il permalink per quell'URL, fai così:

Permalink.find_by_url(“/blah”).destroy


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

### Creazione di una mappa degli argomenti da MyBB a Discourse

[quote="Dan Dascalescu, post:21, topic:20930, username:dandv"]
Ho appena creato automaticamente una mappa degli argomenti da MyBB a Discourse, utilizzando lo script di migrazione.

MyBB era impostato per utilizzare URL ottimizzati per i motori di ricerca 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:

1. Ho modificato l'importer per generare righe che finiscono per creare un [file di mappatura](https://gist.github.com/dandv/f6476574118d079b9063) da utilizzare per il [modulo map](http://serverfault.com/questions/441235/maintaining-redirects-in-nginx-from-an-external-source/441517#441517) di nginx. Per l'importer MyBB, ho aggiunto questo codice in [`create_posts`](https://github.com/discourse/discourse/blob/9171125954620a5a1b9da128e5a82af22dad916e/script/import_scripts/mybb.rb#L130):

```ruby
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 trasformato il file in 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.
2. 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;
}
  1. Completa i passaggi di ricaricamento di nginx e ricostruzione del container dalla fine del post Configure nginx… collegato sopra.

Sarebbe fantastico se qualcuno più esperto in Ruby potesse modificare l’importer per generare la mappa degli ID argomento (o ancora meglio, la mappa nginx direttamente).
[/quote]

Domande sul reindirizzamento da Discourse a WordPress

Normalizzazione dei Permalink


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

37 Mi Piace