Discourse rewriting url path behaviour failing due to subfolder 토론을 이어서:
aforementioned 토픽에서 언급된 것과 정확히 동일한 문제를 겪고 있습니다. 해당 토픽에서는 서브루트의 시작 부분이 서브폴더와 동일한 경우에만 URL이 재작성되는 상황이었습니다. 저는 /f를 서브폴더로 사용하고 있으며, 이 설정이 가진 주의사항과 불편함을 잘 알고 있지만, 다른 모든 부분은 정상적으로 작동하므로 가능하면 이 문제를 해결하는 데 도움을 받고 싶습니다.
저는 기존 Discourse 라우트를 사용하지 않고 있지만, 한 글자 서브폴더가 문제라면 다른 설정을 고려하기 전에 먼저 이를 수정해 보고 싶습니다.
재작성되는 일부 라우트:
/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
클라이언트 측 재작성이기 때문에, 동일한 URL에 대해 CURL을 사용하면 정상적으로 작동합니다.
이 커밋이 원래 이 문제를 수정했지만, getURL은 Discourse.BaseUri 대신 get-url 헬퍼를 사용하도록 변경되었습니다.
해당 getURL 호출을 추적해 보면, 첫 번째 호출 시 location.pathname은 올바르게 /f로 시작하지만, 이후 호출 중 하나에서 서브폴더가 제거되어 /t/f-started-slug/id가 되고, 이로 인해 이 replace가 해당 /f에 작용합니다.
저는 Discourse 내부 구조를 충분히 이해하지 못해 이 재작성이 어디서 일어나는지를 완전히 파악하지는 못했지만, 제 인스턴스에서 테스트해 본 결과 withoutPrefix의 replace를 path의 시작 부분에서만 작용하도록 강제하면 문제가 해결되는 것 같습니다.
// 변경 전 ...
return path.replace(rootURL, "");
// 변경 후 ... (rootURL이 이스케이프될 필요가 없다고 가정할 때)
return path.replace(new RegExp("^" + rootURL), "")
// 또는 정규식 없이 ...
return path.indexOf(rootURL) === 0 ? path.slice(rootURL.length) : path;
이것이 가능한 수정 방법인지, 아니면 어떤 회귀 문제를 일으킬지는 알 수 없습니다. 도움이 되면 감사하겠습니다.