Continuando la discusión de Discourse rewriting url path behaviour failing due to subfolder:
Tengo exactamente el mismo problema que en el tema mencionado, en el que la URL se reescribe solo en escenarios donde el inicio de una subruta coincide con la subcarpeta. Estoy usando /f como subcarpeta; entiendo las advertencias y dificultades de esta configuración, pero todo lo demás funciona bien, por lo que me gustaría recibir ayuda para solucionarlo, si es posible.
No estoy utilizando una ruta existente de Discourse, pero si el problema es la subcarpeta de una sola letra, me gustaría intentar solucionarlo antes de considerar una configuración diferente.
Algunas rutas que se reescriben:
/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
Al ser una reescritura del lado del cliente, hacer CURL a las mismas URLs funciona correctamente.
Este es el commit que originalmente solucionó el problema, pero getURL ha cambiado para usar los helpers get-url en lugar de Discourse.BaseUri.
Siguiendo las llamadas a ese getURL, location.pathname es correcto en la primera llamada (comenzando con /f), pero en una de las siguientes llamadas la subcarpeta se elimina y pasa a ser /t/f-started-slug/id, lo que hace que este reemplazo actúe sobre ese /f.
No conozco lo suficiente los internos de Discourse para entender completamente dónde se está produciendo esta reescritura, pero probando en mi instancia, forzar el reemplazo en withoutPrefix para que solo actúe al inicio de path parece solucionarlo.
// cambiando ...
return path.replace(rootURL, "");
// a algo como ... (asumiendo que rootURL no necesita ser escapado)
return path.replace(new RegExp("^" + rootURL), "")
// o sin regex ...
return path.indexOf(rootURL) === 0 ? path.slice(rootURL.length) : path;
No sé si eso sería una posible corrección o si introduciría alguna regresión; cualquier ayuda será apreciada.