Come suggerito, sto cercando di mantenere il mio vecchio forum “in loco” mentre uso Discourse sullo stesso dominio. Sono riuscito a far funzionare nginx per il proxy e a risolvere eventuali conflitti con gli URL di Discourse, quindi tutto funziona alla grande al caricamento iniziale della pagina (e a fini SEO).
Il mio problema riguarda i collegamenti a quei vecchi URL all’interno di Discourse. Il routing dell’app Discourse intercetta quegli URL come collegamenti interni e quindi restituisce 404. Ho provato innumerevoli modi per aggirare questo problema con gli strumenti a disposizione, ma nulla funziona con gli URL o con lo stesso dominio. (Inoltre, non voglio mettere Discourse in una sottocartella).
Se solo potessi aggiungere all’array SERVER_SIDE_ONLY per mimare ciò che sto facendo in nginx, dovrebbe funzionare. Qualcuno ha suggerimenti su come fare, o qualcos’altro?
Non è affatto ciò che quel topic raccomandava. Dovresti avviare il tuo nuovo forum su un nuovo sottodominio e lasciare il vecchio.
Penso che sia giusto. Se vuoi davvero che il vecchio forum e quello nuovo siano sullo stesso dominio (cosa che, di nuovo, sembra un’idea orribile per i problemi che hai già delineato), potresti concepire un altro dominio che sia un CNAME per quello vecchio e far collegare Discourse a quelli, quindi penserebbe che si tratti di un server diverso e non cercherebbe di gestire quei link da solo e quando nginx ricevesse il link, servirebbe semplicemente i dati dall’altro dominio o reindirizzerebbe il browser a quello giusto.
Ho considerato di mettere le vecchie cose su un sottodominio archive (rischiano di influire sulla SEO), ma anche in quel caso non credo ci sia un modo per far sì che Discourse cambi il link che un utente fornisce se non creando un permalink per ogni pagina possibile. Suppongo che l’uso del sottodominio archive alla fine prenda piede poiché le persone ne verranno a conoscenza e copieranno/incolleranno dalla barra degli indirizzi del browser.
Se avessi appena eseguito un’importazione, ci sarebbero collegamenti permanenti per tutti questi, ma non è molto utile. Ed è il tipo di cosa a cui potrebbe pensare qualcuno che si guadagna da vivere facendo importazioni.
La cosa più semplice sarebbe spostare il nuovo forum su un nuovo URL (sperando che non rovini troppo la SEO) o spostare il vecchio forum su un altro (e perdere la SEO per le vecchie cose, anche se potrebbe essere possibile fare una normalizzazione dei collegamenti permanenti o una magia NGINX che faccia i reindirizzamenti). Il nuovo sito è attivo da molto tempo?
Potresti essere in grado di creare una normalizzazione dei collegamenti permanenti. . . no. Penso che le normalizzazioni dei collegamenti permanenti funzionino solo per i collegamenti permanenti e non possano essere esterni. Potrebbe essere possibile avere un componente tematico che trovi URL corrispondenti e li riscriva con l’hostname fittizio/cname, ma non sono sicuro di cosa arrivi al post cotto (è l’URL completo con hostname, o il processo di cottura rimuove l’hostname?).
! Posso gestirlo nella pagina 404 tramite uno script nell’HTML del tema…
Ho fatto in modo che la pagina 404 ricaricasse la finestra del browser all’URL “mancante”, che colpirà il server. Funziona! L’unico svantaggio che vedo è che il reindirizzamento è evidente e si viene portati fuori dall’app per qualsiasi 404 reale (perdendo la barra laterale/l’intestazione).
<script type="text/discourse-plugin" version="0.8">
api.onPageChange((url, title) => {
const router = api.container.lookup('service:router');
var is404 = document.getElementsByClassName("page-not-found");
if (is404.length) {
const params = new URLSearchParams(router.currentRoute.queryParams).toString();
let q = "";
if (params){ q = "?"+params; }
window.location.replace(window.location.origin + url + q);
}
});
</script>
Componente del tema creato! Cerca qualsiasi href all’hostname con un percorso che corrisponda alle tue regex fornite, quindi aggiunge un evento click per impostare window.location per saltare il routing interno.
Gli URL dello stesso dominio vengono visualizzati in onebox e presentano ancora lo stesso problema di un link normale. Il mio componente del tema si applicherà a tutti i link <a> href nel post, quindi funziona anche per i link in onebox.