서브폴더 설정에서 클라이언트 사이드 경로 재작성 실패

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;

이것이 가능한 수정 방법인지, 아니면 어떤 회귀 문제를 일으킬지는 알 수 없습니다. 도움이 되면 감사하겠습니다.

1개의 좋아요

음, 기존 주제에 대해 더 잘 검색해 봤으면 어제의 답변을 찾아 이 문제를 해결할 수도 있었을 텐데…
https://meta.discourse.org/t/two-bugs-with-usernames-starting-with-subfolder-name/169505/6

수정: 방금 70050a8ba3으로 업그레이드했는데 문제가 여전히 지속됩니다.

2개의 좋아요

시간이 나면 이 부분을 확인해 보겠습니다.

4개의 좋아요

실제로 그 방법이 맞는 것 같습니다. 조사와 버그 리포트에 감사드립니다. 이 PR이 문제를 수정해야 합니다:

@renato 님, 한번 시도해 보실 수 있을까요?

2개의 좋아요

이제 잘 작동하고 있어요, 감사합니다!

2개의 좋아요

이 주제는 7일 후 자동으로 닫혔습니다. 더 이상 새 답글을 작성할 수 없습니다.