모든 404 페이지를 홈으로 리다이렉트하는 방법?

안녕하세요,

깨진 404 페이지를 자동으로 홈 또는 다른 페이지로 리다이렉트할 수 있나요?

감사합니다

Discourse가 htaccess를 사용하지 않으므로 해결 방법을 어디서 찾아야 할지 확실하지 않습니다. 도움을 주시면 감사하겠습니다 :slight_smile:

플러그인을 만들어서 그걸 달성할 수 있을지도 모르겠네요.

즉시 리다이렉트하면 혼란을 줄 수 있으니, 404 라우트를 짧은 타이머 후에 홈으로 리다이렉트하도록 변경하고 그에 맞는 메시지를 표시하는 건 어떨까요?

그렇게 하면 될 것 같지만, 어떻게 해야 하는지 모르겠습니다 :confused:

이 기능을 제공하는 플러그인이 있을까요?

그건 의문이다. #marketplace를 사용할 수 있다

Apache2가 Discourse 앞에 있는 경우에도 .htaccess는 사용해서는 안 됩니다 — 그리고 실제로도 그렇지 않습니다.

Docker는 상황을 더 복잡하게 만들죠 :wink: 그래서 어떻게 처리해야 할지 모르겠습니다. 하지만 원한다면 Nginx(또는 다른 서버/리버스 프록시)를 Discourse 앞에 배치할 수 있습니다. 그러면 이러한 리디렉션은 꽤 단순한 작업이 될 것입니다. 다음과 같은 방식으로 처리할 수 있습니다:

https://stackoverflow.com/questions/19487365/how-do-i-force-redirect-all-404s-or-every-page-whether-invalid-or-not-to-the

하지만 왜 404를 프론트 페이지로 리디렉션하고 싶은 것일까요? 사용자가 무언가를 찾고 있는데 원하는 페이지나 404 대신 프론트 페이지가 표시되면 다소 혼란스럽습니다. 그리고 같은 사용자는 아마도 자신이 무언가를 잘못했거나 해당 사이트에 문제가 있다고 생각하여 다시 시도할 것입니다. 이는 전혀 필요 없는 일이며, 모든 사이트가 이상한 리디렉션 대신 404 오류를 표시해야 하는 이유이기도 합니다.

저는 WordPress 블로그를 Discourse로 이식하고 있습니다. 이제 링크 구조가 달라지기 때문에 이식 후 404 페이지가 대량으로 발생하게 됩니다. 각각을 수동으로 리다이렉트 설정할 수 없으므로, 이를 자동으로 처리할 수 있는 해결책이 필요합니다.

네, 하지만 그건 해결책이 아닙니다. 그냥 나쁜 패치일 뿐이에요. URL 구조는 여전히 깨져 있을 텐데, 그걸 숨기는 것뿐이죠. 그리고 그렇게 해서 SEO 가치를 이전할 수도 없고요. :slight_smile:

어쨌든 — 거기서 서버를 하나 사용 중인 거라면, 그걸 활용해보는 건 어떨까요?

Wordpress와 Discourse 사이트에 서로 다른 서브도메인을 사용한다면, Wordpress 서버 측에서 이를 처리할 수 있을 가능성이 높습니다.

page_not_found.title을 수정할 수 있습니다(기본값은 “Oops! That page doesn’t exist or is private.”). 상황을 자세히 설명할 수 있는 page_not_found.content와 같은 기능이 없다는 점은 다소 아쉽습니다.

도움이 된다면 detailed 404 관리자 설정이 있습니다.

제가 아는 한, 그 옵션에는 어떤 형태의 리다이렉트도 포함되지 않습니다.

해당 링크들이 어디를 가리키고 있는지와 관계없이… Discourse로 마이그레이션될 예정인가요? 예를 들어, 해당 링크가 블로그 포스트를 가리키고 있고 이를 토론(Topic)으로 전환하는 경우, 영구 링크(permalinks)를 생성할 수 있습니다: Redirect old forum URLs to new Discourse URLs using permalinks

또한 해당 URL을 다른 것으로 재매핑할 수도 있습니다. URL에 공통된 형식이 있다면 REGEX와 remap 명령을 사용하여 이를 교체할 수 있습니다:

remap [--global,--regex] FROM TO

명령어 사용 예시:

discourse remap --regex "\[\/?color(=[^\]]*)*]" "" # "color" bbcode 제거

다만, 구글과 사용자 모두를 만족시키려면 WordPress 서버에서 이를 수행해야 합니다.

“Customize” 기능을 사용하여 모든 깨진 404 페이지를 홈 페이지 또는 다른 페이지로 리다이렉트할 수 있습니다.
Customize > Themes > Create New Theme 섹션으로 이동하여 테마 이름을 404 Redirect 등으로 지정하고, Base Theme를 Default로 설정하세요.
그 다음 새 테마를 생성한 후 CSS/HTML를 편집합니다. HTML 섹션에서 리다이렉션을 처리하는 JavaScript 스니펫을 생성하세요.
아래 코드를 붙여넣으세요.

<script type="text/discourse-plugin">
  api.onPageChange((url, title) => {
    // 모든 404 페이지를 홈 페이지로 리다이렉트합니다.
    if (url.includes('/404')) {
      window.location.href = '/';
    }
  });
</script>

필요에 따라 페이지 이름을 조정하세요. 이 기존 URL을 새 Discourse URL로 리다이렉트하는 방법을 읽어보세요.