루트를 통해 내부 링크 리다이렉트

현재 웹사이트에 다음과 같은 리디렉션이 설정되어 있습니다: example.com/[0-9]+/[0-9]+ → example.com/tag/$1-$2 (여기서 $1과 $2는 이전 정규식에서 가져온 값입니다). 아래에 간단한 플러그인을 작성했는데, 주소창에 example.com/[0-9]+/[0-9]+를 직접 입력하면 완벽하게 작동합니다. 그러나 디스코urs 포스트 내부에 동일한 링크를 넣으면 리디렉션이 작동하지 않습니다. 이 문제를 해결할 방법이 있을까요?


Discourse::Application.routes.append do
    get '/:year/:id', to: redirect('/tag/%{year}-%{id}') , constraints: {year: /[0-9]+/, id: /[0-9]+/}
end

원시 게시물(raw posts)의 내부 링크를 다시 작성해야 합니다(그리고 rebake).

이렇게 하면 지금까지의 현재 게시물들만 변경되는 거죠? 그러면 새로운 게시물이 올라올 때마다 이 작업을 해야 하는 건가요?

새로운 링크는 Discourse에 의해 작성되므로 처음부터 올바르게 생성됩니다.

아니면 더 많은 게시물을 가져오려는 경우일 수도 있는데, 그렇다면 가져오기 스크립트를 수정하여 링크를 수정해야 합니다.

해당 라우트를 만든 초기 목적은 임포트(import)와 관련이 없습니다. example.com/123/456(123과 456은 [0-9]+만 충족하면 임의의 값으로 가능합니다)을 example.com/tag/123-456의 단축키로 사용하고 싶기 때문에, 이를 사용하는 것이 의미론적으로 ‘잘못된’ 것은 아닙니다.

하지만 해당 라우트는 내부 링크에서 작동하지 않습니다(라우트가 작동하려면 웹사이트를 새로고침해야 합니다). 따라서 각 example.com/[0-9]+/[0-9]+를 example.com/tag/[0-9]+-[0-9]+로 변경해야 하는데, 각 새 게시물을 하나씩 파싱하지 않고서는 실제로 불가능해 보입니다.

죄송합니다. 태그에 대한 라우트를 마음에 들어 하지 않는다는 것이 문제라는 점을 놓치고 있었습니다. 그 라우트를 변경하는 것이 왜 가치 있다고 생각하시나요? 사람들이 직접 입력을 할 예정인가요? 그럴 일은 없을 것입니다. Discourse는 검색하여 태그를 입력할 수 있도록 해주니까요.

한 발짝 물러서서, 태그 라우트에서 "tag"를 제거함으로써 어떤 문제를 해결하려는 것인지 말씀해 주시겠어요?

제 웹사이트는 사전 인쇄 서버(preprint server)의 논문과 태그를 1:1로 대응시킵니다. 사용자는 preprint.com/123/456과 같은 주소를 방문하는 데 익숙합니다. 이는 ID가 123-456인 논문을 가리키며, 제 웹사이트에서는 mywebsite.com/tag/123-456에 해당합니다. 따라서 mywebsite.com/123/456을 mywebsite.com/tag/123-456으로 리디렉션하는 라우트를 설정해 두었습니다.

이 아이디어는 사용자가 preprint.com을 mywebsite.com으로 단순히 치환하여 사전 인쇄 서버에서 보던 정확한 논문 페이지에 바로 도달할 수 있도록 하는 것입니다. 누군가 게시물에 mywebsite.com/123/456이라는 내부 링크를 붙여넣기 전까지는 이 기능이 잘 작동했습니다. 하지만 리디렉션이 되지 않고 404 오류가 발생한다는 것을 발견했습니다. 저는 매우 구체적이고 타겟팅된 사용자 기반을 위해 Discourse를 사용하고 있으므로, 제 사용 사례가 다소 이색적으로 보일 수 있습니다.

아하. 그렇다면 게시물에 입력된 링크를 다시 작성(rewrite)해 주는 테마 구성 요소가 필요하신 것 같습니다. 정확히 어떻게 해야 하는지는 잘 모르겠습니다. 하나는 그 링크들을 위해 BBCode를 사용하는 것인데, 사용자에게 약간의 교육이 필요할 것입니다. 하지만 테마 구성 요소가 링크가 최종적으로 처리될 때 해당 링크를 가로채서 다시 작성할 수 있을 것 같습니다.

테마 컴포넌트에 대해 언급해 주신 덕분에, 다음 컴포넌트를 사용하여 찾고자 했던 것을 부분적으로 구현할 수 있었습니다: Auto-Linkify Words

정규식을 완벽하게 지원하므로, 누군가가 mywebsite.com/123/456을 입력하면 링크가 https://mywebsite.com/tag/123-456으로 성공적으로 대체됩니다.

다만, URL 앞에 https:// 접두사가 붙어 입력된 경우에는 작동하지 않습니다. 그래도 여전히 매우 훌륭한 컴포넌트입니다.

좋아요! https가 포함된 것도 커스텀 테마 컴포넌트로 해결할 수 있다고 생각하지만, 사람들이 그런 방식으로 사용하지 않도록 훈련시키거나 #123-456 형식을 사용하도록 유도해 볼 수도 있겠네요.