사용자 정의 401, 403 및 500 오류 페이지를 작성하는 방법은 무엇입니까?


27

404 오류가 발생하면 404.php 템플릿 파일을 사용하여 사용자 정의 오류 메시지를 렌더링 할 수 있습니다. 이것은 템플릿 계층 구조 기사에 설명되어 있습니다.

내 목표는 401, 403 및 500 오류에 대한 사용자 지정 오류 페이지를 만드는 것입니다. 테마 디렉토리에 401.php, 403.php 및 500.php 파일을 만들려고 시도했지만 작동하지 않습니다.

WordPress에서 사용자 정의 401, 403 및 500 오류 페이지를 작성하는 방법


2
이 코드를 시작점으로 사용 해보세요 : jesin.tk/wordpress-custom-403-401-error-page
Joe

다음은 403 및 401 오류와 같은 오류 페이지를 사용자 정의 할 수있는 기존 플러그인입니다. http://wordpress.org/plugins/custom-error-pages/ 설치하고 활성화하기 만하면됩니다. 그러나 플러그인 옵션 페이지에 지정된 .htaccess (또는 nginx.conf) 파일을 수동으로 편집해야합니다.
Pi Lover

답변:


15

오류 페이지는 .HTACCESS를 통해 제공됩니다. Apache를 사용하는 경우 ErrorDocument지시문을 사용 하고 상태 및 URL을 추가하십시오.

따라서 .htaccess 파일에서 다음과 같이 보일 것입니다.

ErrorDocument 401 http://yourwebsite.com/error-401
ErrorDocument 403 http://yourwebsite.com/error-403
ErrorDocument 500 http://yourwebsite.com/error-500

아래의 기능을 사용할 수 있습니다. 이것은 HTACCESS 파일에 필요한 것을 동적으로 추가하거나 수동으로 할 수 있습니다.

1. 페이지 추가 :

그런 다음 대시 보드로 이동하여 일반 페이지와 같은 페이지를 만들어야합니다 ( '대시 보드'> '페이지'> '신규'). 원하는 제목을 지정할 수 있습니다. 슬러그가 아래 기능과 동일해야합니다 (슬러그 : error-401, error-403, error-404, error-500). 또한 페이지 템플릿을 사용하여 이러한 특정 페이지에 원하는 레이아웃과 스타일을 만들 수 있습니다. 이에 대한 WordPress Codex 지침을 따르십시오 .

2. 기능 추가 :

// Create Custom Error Pages in WordPress using HTACCESS
function royal_custom_error_pages() {

    // Get HTACCESS path & dynamic website url
    $htaccess_file = '.htaccess';
    $website_url = get_bloginfo('url').'/';

    // Check & prevent writing error pages more than once
    $check_file = file_get_contents($htaccess_file);
    $this_string = '# BEGIN WordPress Error Pages';

    if( strpos( $check_file, $this_string ) === false) {

    // Setup Error page locations dynamically
    $error_pages .= PHP_EOL. PHP_EOL . '# BEGIN WordPress Error Pages'. PHP_EOL. PHP_EOL;
    $error_pages .= 'ErrorDocument 401 '.$website_url.'error-401'.PHP_EOL;
    $error_pages .= 'ErrorDocument 403 '.$website_url.'error-403'.PHP_EOL;
    $error_pages .= 'ErrorDocument 404 '.$website_url.'error-404'.PHP_EOL;
    $error_pages .= 'ErrorDocument 500 '.$website_url.'error-500'.PHP_EOL;
    $error_pages .= PHP_EOL. '# END WordPress Error Pages'. PHP_EOL;

    // Write the error page locations to HTACCESS
    $htaccess = fopen( $htaccess_file, 'a+');
    fwrite( $htaccess, $error_pages );
    fclose($htaccess);

    }
}

add_action('init','royal_custom_error_pages'); // This will run the function everytime, not ideal!

// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Using a plugin, runs only once!

NB !! 위의 기능에 대한 참고 사항

웹 사이트를 옮기거나 URL 구조를 변경할 때

위 함수에서 기억해야 할 것은 ErrorDocument 지시문이 HTACCESS 파일에 쓰기 전에 이미 존재하는지 확인하지만 업데이트 된 페이지 위치를 반영하도록 블로그를 변경하거나 이동해도 ErrorDocument 지시문을 다시 쓰지 않습니다. HTACCESS 파일에서 기존 ErrorDocument 지시문을 먼저 삭제 한 다음이 함수를 다시 실행하여 새 지시문을 작성해야합니다.

올바른 후크 만 기능을 실행

주목해야 할 또 다른 사항은이 기능이며, init페이지를로드 할 때마다 작업이 실행되어 매우 불필요하고 낭비가되므로 플러그인에 추가하고 register_activation_hook오히려 플러그인 활성화시 한 번만 실행되도록 제안하는 것이 좋습니다

파일 권한

또한 위의 기능을 사용할 때 .htaccess가 쓰기 가능해야하므로 CHMOD777과 같은 올바른 파일 권한이 있는지 확인하십시오.


이것이 어떻게 작동하는지 잘 모르고 .htaccess 파일을 수동으로 편집했지만 작동하지 않습니다. localhost 에서이 작업을 수행하려고하는데 모든, 서버 및 클라이언트에 액세스 할 수 있으므로 localhost에서 가능해야합니다. 그러나 왜 이것이 작동하지 않습니까?
Solomon Closson

@SolomonClosson, 아마도 당신은 내가 이것을 위해 작성한 플러그인을 사용해 볼 수 있습니다. 그것은 당신을 위해 모든 것을 할 것이고 정확히 위의 코드를 따릅니다 :). 공식 WordPress.Org 플러그인
Matt Royal

@MattRoyal이 기능은 훌륭하게 작동하며 다른 htaccess 규칙을 만드는 데 사용하고 있습니다. 기본 wp htaccess 규칙보다 파일의 맨 위에 규칙을 삽입하려면 어떻게해야합니까? 현재 규칙은 htaccess 파일의 맨 아래에 추가됩니다. 고맙습니다.
lowtechsun

나는 해결책에 동의하지 않습니다 : 1- 당신은 웹 서버에 아무것도 777해서는 안됩니다! 이는 일반적으로 나쁜 습관이며 주요 보안 허점으로 이어집니다. 2- 모든 요청에 ​​대해 파일 쓰기를 웹 사이트에 추가하고, 쓰기 작업이므로 파일에 대한 잠금을 작성하여 요청 수를 줄이고 동시에 응답 할 때 한 번만 쓰기를 허용합니다. 3- 웹 사이트는 실행되는 서버에 의존하지 않아야합니다. 예를 들어 nginx가 사용되는 시스템으로 마이그레이션되면 예상대로 작동하지 않습니다. ... 계속
Eduardo Oliveira

4- 오류를 잡는 더 확실한 방법이 있습니다 stackoverflow.com/a/34619308/768516
Eduardo Oliveira
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.