Continuando la discussione da Discourse rewriting url path behaviour failing due to subfolder:
Ho esattamente lo stesso problema del tema menzionato, in cui l’URL viene riscritto solo in scenari in cui l’inizio di una sottorotta è uguale alla sottocartella. Sto usando /f come sottocartella; comprendo le limitazioni e le difficoltà di questa configurazione, ma tutto il resto funziona correttamente, quindi vorrei ricevere aiuto per risolvere il problema, se possibile.
Non sto utilizzando una rotta Discourse esistente, ma se una sottocartella di una sola lettera è un problema, vorrei provare a risolverlo prima di considerare una configurazione diversa.
Alcune rotte che vengono riscritte:
/f/t/food-chain-magnate/4826→/f/tood-chain-magnate/4826/f/tag/food-chain-magnate→/f/tagood-chain-magnate/f/u/renato/follow/following→/f/u/renatoollow/following/f/u/fred/summary→/f/ured/summary
Poiché si tratta di una riscrittura lato client, le stesse URL funzionano correttamente se richiamate con CURL.
Ecco il commit che ha originariamente risolto il problema, ma getURL è stato modificato per utilizzare gli helper get-url invece di Discourse.BaseUri.
Seguendo le chiamate a getURL, location.pathname è corretto alla prima chiamata (iniziando con /f), ma in una delle chiamate successive la sottocartella viene rimossa e diventa /t/f-started-slug/id, causando l’esecuzione di questa sostituzione su quel /f.
Non conosco abbastanza gli interni di Discourse per capire appieno dove avviene questa riscrittura, ma testando nella mia istanza, forzando la sostituzione in withoutPrefix ad agire solo all’inizio di path sembra risolvere il problema.
// cambiando ...
return path.replace(rootURL, "");
// in qualcosa come ... (assumendo che rootURL non debba essere escapato)
return path.replace(new RegExp("^" + rootURL), "")
// o senza regex ...
return path.indexOf(rootURL) === 0 ? path.slice(rootURL.length) : path;
Non so se questa potrebbe essere una correzione possibile o se introdurrebbe qualche regressione; qualsiasi aiuto è apprezzato.