마지막 업데이트로 인해 카테고리 영구 링크가 깨졌습니다

마지막 업데이트 이후로 카테고리 영구링크가 깨진 상태이며, 토픽의 영구링크는 정상적으로 작동하고 있습니다.
예를 들어, category/11562가 c/11562로 리디렉션되고 있는데 이는 잘못된 것입니다. 올바르게 설정된 목적지 리디렉션은 c/general/4 또는 c/4여야 합니다.
이 문제를 해결하는 데 도움을 주실 분 계신가요?

category/11562에 대해 general로 리디렉션되던 영구 링크를 만들었는데, 지금은 깨져 있나요?

그것은 어떤 업데이트 브랜치에서 온 건가요?

맞아요, 원래는 잘 작동했어요. 그런데 다음 버전으로 업데이트한 후:

<meta name="generator" content="Discourse 3.3.0.beta1-dev - https://github.com/discourse/discourse version 0bb492c6b6b79389a12b277b9d25b99e75f2625d">

DB를 완전히 비우고 다른 포럼 데이터를 처음부터 다시 가져왔는데, 이제 작동하지 않습니다.

오늘 아침까지 통과한 테스트에서는 이를 재현할 수 없으므로, 이것이 문제인 것 같습니다.

데이터베이스에서 영구 링크(permalink)가 여전히 존재하는지, 그리고 여전히 올바른 위치를 가리키고 있는지 확인해 보실 수 있을까요?

새로운 가져오기를 통해 영구 링크(permalinks)를 다시 추가했는데, 이는 가져오기 스크립트가 처리합니다. 하지만 웹에서 수동으로 추가하는 것도 시도해 보았습니다. 웹 화면 스크린샷과 DB 결과를 첨부합니다. 제가 놓치고 있는 것이 있는 것 같습니다:

죄송합니다, 게시글당 스크린샷 1개만 허용됩니다

영구 링크는 /category/11562가 아니라 /forum/category/11562에 있습니다.

빠른 추측이지만, 중간에 영구 링크 정규화 설정을 잃어버린 것 같습니다.

https://preview.vaadin.com/forum/category/11562에 대한 응답을 확인했는데, 이해가 되지 않습니다.

302와 Location:
https://preview.vaadin.com/forum/c/11562
을 반환받습니다.

반면에, 예를 들어 주제(thread)의 경우:
https://preview.vaadin.com/forum/thread/851770

301과 Location:
https://preview.vaadin.com/forum/t/tabsheet-tabs-not-displaying-properly-in-ie8-after-upgrade-to-6-7-1/173931
을 반환받습니다.

Discourse가 이 두 경우를 동일하게 처리할 것으로 기대했는데, 보시는 바와 같이 두 경우 모두 /forum/ 세그먼트를 유지하고 있습니다.

게시판 전체가 서브폴더 설치라는 사실을 언급하지 않으셨군요.

그래서 조금 더 자세히 파보았는데, category/는 항상 categories#redirect 라우트를 트리거하기 때문에 이 기능이 어떻게 작동할 수 있었는지 이해가 되지 않습니다. 그리고 이 부분은 최근 변경된 적도 없습니다.

get "category/*path" => "categories#redirect"

수정: 아래 게시물을 보면 예전에는 작동했던 것으로 보입니다

네. 서브폴더 설치 환경에서 영구링크(permalinks)와 permalink_normalizations가 어떻게 작동하는지 감 잡기조차 어렵습니다.

그리고 항상 서브폴더 설치 환경이었나요?

수입 스크립트를 다시 실행할 때 다른 변경 사항이 없었나요?

스크립트에서 무언가가 달라진 것 같아 보입니다.

잠깐. https://meta.discourse.org/category/67가 https://meta.discourse.org/c/announcements/67로 리다이렉트되므로… 아니, 하지만 /category 리다이렉트를 영구링크가 우선시한다는 스펙이 있고, 그것도 4~5년 된 것입니다.

따라서 제가 직접 몇 가지 카테고리 리다이렉트를 만들어서 무슨 일이 일어나고 있는지 파악해 볼 것 같습니다 (숫자조차 없는 /category/mycategory나 다른 것들처럼요).

좋은 지적입니다 @pfaffman, 그 테스트를 보면 실제로 작동해야 했네요.

와, 그런 것도 가능했네요! 몰랐습니다.

네, 꽤 괜찮네요. Serve Discourse from a subfolder (path prefix) instead of a subdomain 에서 확인해 보세요.

모든 답변에 감사합니다!

흥미롭게도, 원본 URL에 /category/라는 경로가 없을 때만 하위 폴더에서 카테고리 영구 링크(permalinks)가 작동한다는 사실을 발견했습니다. @pfaffman 님이 답변에서 언급하신 내용과 일치합니다. 예를 들어, /forum/category_foo/123 은 일반 카테고리(destination general category)로 올바르게 리디렉션됩니다.
Discourse는 /category/를 캡처하여 /c/로 덮어씁니다.
따라서 이 문제는 정말 쉽게 해결할 수 있습니다:
기존 category/11562에서 일반 카테고리 /c/4로 리디렉션되는 /c/11562에 영구 링크를 추가하면 됩니다.

말씀하신 대로, 첫 번째 설치에는 하위 폴더가 없었고 두 번째 설치에는 하위 폴더가 있었으며, 이번이 세 번째 설치입니다. 테스트해 본 결과, 처음 두 번은 작동했던 것으로 보입니다. 두 번째와 세 번째 설치 사이에서 변경된 유일한 사항은, 첫 번째와 두 번째 설치 사이에 DB를 정리하지 않았던 반면, 세 번째 설치에서는 Docker 외부에서 새로운 DB로 클린 인스톨을 수행했다는 점입니다(또한 Discourse v3로 업그레이드도 했었죠). 그래서 Discourse v3 베타 버전에서 무언가가 변경된 것으로 의심됩니다. 그렇지 않다면, 하위 폴더가 없었을 때도 왜 한때는 작동했던 걸까요?

답을 드리겠습니다

제 이해가 맞다면, 말씀하신 것은 Discourse가 라우트에 세그먼트가 있는 경우에만 /category/에서 /c/로 리디렉션한다는 뜻이죠.

그럼에도 불구하고, 당신의 포럼을 예로 들면: https://meta.discourse.org/에 https://meta.discourse.org/category/1을 입력하면 https://meta.discourse.org/c/bug/1으로 리디렉션됩니다.

이것은 저희 설치 환경에서도 겪고 있는 현상과 동일합니다. 만약 당신의 사이트에서도 /category/#old_number에서 /c/#real_category로 리디렉션하는 것이 불가능하다면, 결국 항상 /c/#old_number에 도달하게 될 것입니다.