경로에 Discourse 리소스 이름이 포함된 경우 구럼 포럼 URL 재지정

안녕하세요,

저의 기존 포럼 URL은 /posts/t{topic_id}-{url_slug} 형식입니다.

저는 Discourse의 Permalink를 사용하여 기존 포럼 URL을 새로운 Discourse URL로 매핑했습니다.

문제는 Rails Router가 기존 포럼 URL에 대한 요청을 “posts” 리소스와 관련된 라우트 중 하나로 라우팅한다는 것입니다. (어떤 라우트인지 정확히 알지 못합니다.)

Permalink Normalization은 라우팅이 완료된 후에 실행되므로, 이 방법은 해결책이 되지 않습니다.

해결책은 config/routes.rb에 커스텀 라우트를 추가하여 URL이 /posts/t{topic_id}-{url_slug} 형식일 경우 PostsController의 요청 처리를 건너뛰는 것이라고 생각합니다. 하지만 저는 Rails 라우팅에 충분히 숙달되지 않아 이 변경 사항을 수행할 수 없습니다. 아니면, 이것이 올바른 방법이 아닐 수도 있나요?

감사합니다.

그건 좀 불운하네요.

그 URL들은 어떤 모습인가요? 추가하신 Permalink가 무엇인가요?

포럼이 이미 라이브 상태인가요, 아니면 여전히 import 스크립트를 실행할 수 있나요? (실제로 제가 설명하는 것과 같은 Permalink를 추가하기 위해 Rails에서 실행할 수 있는 Ruby 스크립트를 만들 수도 있습니다.)

아마도 Permalink를 /oldforum/{topic_id}처럼 만들고, nginx 설정에 /posts/t URL을 잡아 /oldforum/{topic_id}로 다시 매핑하는 구성을 추가하고 싶으신 것 같습니다.

그러면 (AI에 따르면) pups를 사용하여 replace를 수행하여 discourse.conf nginx 설정에 다음을 추가해야 합니다 (가까운 미래에 outlet에 추가할 수 있지만, 그 시점은 제가 알지 못합니다):

# Place this inside your server {} block
location ~ ^/posts/t(?<topic_id>\d+)-.*$ {
    # Permanent redirect (301)
    return 301 /oldforum/$topic_id;
    
    # Alternatively, for temporary redirect (302), use:
    # return 302 /oldforum/$topic_id;
}

컨테이너 안에서 직접 변경을 해서 테스트해 보고, 그런 다음 app.yml에 변경 사항을 추가하도록 역추적하는 방식으로 진행하겠습니다.

:laughing:

네, 정확히 그렇게 했습니다. 모든 Permalink를 추가하기 위해 Ruby 스크립트를 작성했습니다.

이렇게 하면 작동했습니다! 감사합니다.

이 솔루션은 리다이렉트 체인이 사이트의 SEO 점수에 영향을 미치기 때문에 불가능할 수 있다는 사실을 알게 되었습니다. 실제 게시물에 도달하려면 두 번의 301 리다이렉트와 세 번의 요청이 필요합니다.

그리고 Permalink가 요청을 처리하도록 합니다. 작동할 것 같지만 확실하지는 않습니다.