개요
워드프레스에서 사용자가 없는 링크를 입력하거나 링크가 깨진 페이지/글을 클릭할 경우 404 페이지 없음(Page not Found) 페이지가 표시됩니다. 하지만 최근에 가비아에 웹호스팅을 이용하고 있는 워드프레스 블로그에서 404 페이지가 표시되지 않고 가비아에서 제공하는 404 페이지가 표시되는게 아닌가요? 테마에서 제공하는 404 페이지가 제대로 작동하지 않은 것인지 아니면 다른 문제가 있는 것인가 모르겠네요. 그래서 404.php 파일을 수정하여 404 페이지를 호출하면 곧바로 홈페이지로 이동시키는 스크립트를 넣은 적이 있습니다.
404 오류 시 홈페이지로 이동(리디렉션)시키기
이 작업을 위해서는 wp redirect 함수를 이용한 코드를 넣을 수도 있지만 다음과 같은 코드를 404.php 페이지를 대체했습니다. (테마에 404.php 파일이 없다면 하나 만드시면 됩니다.)
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location: ".get_bloginfo('url')); exit(); ?>
홈페이지 대신 다른 링크로 리디렉션시키는 것도 가능합니다(header() 함수는 여기 참조).
404 오류 시 약간 지연시킨 후 홈페이지로 리디렉션시키기
또 다른 방법으로 현재 사용 중인 블로그에서는 없는 페이지를 사용자가 방문할 경우 일단 "Page not Found"가 표시되는 404 페이지가 표시되고, 약 3초 후에 홈페이지로 이동하도록 코드를 추가했습니다. 약간 지연시켜서 리디렉션시키고자 하는 경우에는 여러 가지 방법이 있겠지만 다음과 같은 코드를 header.php 파일에 추가했습니다.
<?php if ( is_404() ) : ?> <meta http-equiv="refresh" content="3;url=<?php echo esc_url( home_url( '/' ) ); ?>" /> <?php endif; ?>
위의 코드를 header.php 파일의 적당한 곳에 추가해도 되지만, 테마 파일을 수정하는 것이 추후 유지관리 측면에서 불편할 수 있으므로 wp_head 액션을 사용하여 워드프레스 <head>...</head> 사이에 코드를 넣는 것도 가능합니다. 그럴 경우에는
// In case of 404 Page Not Found, the following code will redirect users to home page with 3 seconds delay add_action('wp_head','hook_404'); function hook_404() { ?> <?php if ( is_404() ) : ?> <meta http-equiv="refresh" content="3;url=<?php echo esc_url( home_url( '/' ) ); ?>" /> // Please change "3" to the one you want <?php endif; ?> <?php }
위와 같은 코드를 WordPress 함수 파일에 추가하면 됩니다.
댓글 남기기