Vue.js에서 404 Not Found 페이지 설정 및 리다이렉트는 어떻게 할까?
404 Not Found 에러는 "서버 자체는 존재하지만 서버에서 요청한 것을 찾을 수 없을 때" 나타나는 오류다. 보통 사용자가 요청하는 페이지나 파일을 찾을 수 없을 때 발생한다. 서버 문제를 제외한다면, 보통 사용자의 오타, 또는 변경되기 이전의 URL로의 접속이 가장 큰 원인이라고 볼 수 있다.
리다이렉트라는 용어 그대로 다시(re) 지시한다(direct)는 뜻이다. HTTP 리다이렉트는 HTTP 표준으로 정의되어 있으며, 최초 요청을 받은 웹서버는 리다이렉트되어야 할 주소를 응답 메세지 헤더 안의 location 안에 담아 HTTP 응답 상태코드로 302
를 보낸다. 또한. 클라이언트는 상태코드가 302
인 HTTP 응답 메세지를 받은 경우 헤더 안의 location URL로 다시 요청한다.
먼저 404 페이지의 목적은 사용자가 존재하지 않는 페이지에 접속을 시도해도 사용자가 계속 홈페이지에 남아있도록 하는 것이라고 한다. 그러기 위해서 조건에 부합하지 않거나, 존재하지 않는 주소에 대해 사전에 만들어 놓은 404 페이지로 리다이렉트하기 위해서다.
const routes = [
{
path: "/404",
name: "notFound",
component: NotFound
},
];
Page Not Found 페이지를 NotFound
컴포넌트에 구현을 한 뒤에 /404
경로와 매칭시킨다.
// Vue 2.x
const routes = [
{
path: '*',
redirect: "/404"
// 아래처럼 바로 NotFound 경로를 매칭해도 됨
// component: NotFound
},
];
모든 페이지들을 경로와 매칭시킨 이후, route 포함되지 않은 모든 경로(default 값)에 대해서 /404
페이지로 리다이렉트한다. '*'
의 의미는 위에서 어떤 경로와도 매칭이 되지 않은 경우 해당 경로로 이동하라는 의미로 이해하면 된다.
Vue 3에서부터 default 값과의 매칭이
pathMatch
로 바뀌었다.
따라서 Vue 3에서부터는 아래와 같은 방법으로 사용한다.
// Vue 3.x
const routes = [
{
path: '/:pathMatch(.*)*',
redirect: "/404"
},
];
동적 라우팅 매칭에서 parameter에 따라서 페이지가 존재하지 않을 수도 있다.
user/:id
와 같은 경로에 대해, 잘못된 형식의 id (ex. 숫자 id인데 문자열을 입력한 경우)를 입력한 경우이와 같이 동적 라우팅에 올바른 parameter가 사용되었는지 확인하기 위해서 Vue-Router의 네비게이션 가드를 이용하여 잘못된 접근을 막을 수 있다.
감사합니다. 도움이 되었습니다.