Como criar páginas de erro 401, 403 e 500 personalizadas?

27

Quando um erro 404 é encontrado, um arquivo de modelo 404.php pode ser usado para renderizar uma mensagem de erro personalizada. Isso está documentado no artigo Hierarquia de modelos .

Meu objetivo é criar páginas de erro personalizadas para erros 401, 403 e 500. Eu tentei criar arquivos 401.php, 403.php e 500.php no diretório do meu tema, mas isso não funciona.

Como criar páginas de erro 401, 403 e 500 personalizadas no WordPress?

Henry Wright
fonte
2
Você pode tentar usar esse código como ponto de partida: jesin.tk/wordpress-custom-403-401-error-page
Joe
Aqui está um plug-in existente que permite personalizar páginas de erro como 403 e 401: http://wordpress.org/plugins/custom-error-pages/ Tudo o que você precisa fazer é instalar e ativar. No entanto, você deve editar manualmente o arquivo .htaccess (ou nginx.conf) especificado na página de opções de plug-ins.
Pi Lover

Respostas:

15

As páginas de erro são exibidas via .HTACCESS, se você estiver usando o Apache, usaria a ErrorDocumentdiretiva e adicionaria o status e a URL a ela.

Portanto, seria assim no seu arquivo .htaccess:

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

Você pode usar a seguinte função abaixo. Isso adicionará dinamicamente o que é necessário ao arquivo HTACCESS para você ou você poderá fazê-lo manualmente.

1. Adicione páginas:

Você precisaria entrar no seu Painel e criar as Páginas como qualquer página normal ('Painel'> 'Páginas'> 'Novo'). Eles podem ter o título que você desejar, apenas verifique se a lesma é a mesma da função abaixo (Lesma: erro-401, erro-403, erro-404, erro-500). Além disso, você pode usar o modelo de página para criar o layout e o estilo desejados para essas páginas específicas. Siga as instruções do WordPress Codex para isso.

2. Adicionar Função:

// 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 !! NOTAS SOBRE A FUNÇÃO ACIMA

Ao mover seu site ou alterar a estrutura do URL

O que deve ser lembrado com a função acima é que, embora ele verifique se as diretivas ErrorDocument já existem antes de gravá-las no arquivo HTACCESS, ele não reescreverá as diretivas ErrorDocument, caso você altere ou mova o blog para refletir os locais atualizados da página. Você precisaria excluir as diretivas ErrorDocument existentes no arquivo HTACCESS primeiro e, em seguida, execute novamente esta função para criar as novas diretivas.

Gancho correto para disparar a função SOMENTE UMA VEZ

A outra coisa a se notar é essa função: usar a initação será executada toda vez que suas páginas forem carregadas, o que é super desnecessário e desperdício, então eu sugiro adicioná-lo a um plug-in e usar o register_activation_hookmodo para que ele seja acionado apenas uma vez na ativação do plug-in

Permissões de arquivo

Além disso, é imprescindível que seu arquivo .htaccess seja gravável ao usar a função acima, portanto, verifique se ele possui as permissões de arquivo corretas, como CHMOD777.

Matt Royal
fonte
Não tendo certeza de como isso deve funcionar, as edições foram feitas manualmente no arquivo .htaccess, mas isso não funciona. Estou tentando fazer isso no localhost e isso deve ser possível no localhost, pois tenho acesso a tudo, ao servidor e ao cliente. Mas por que isso não está funcionando?
Solomon Closson
@ SolomonClosson, talvez você possa tentar usar o plug-in que escrevi para isso, ele fará tudo por você e segue exatamente o código acima :). Oficial WordPress.Org Plugin
Matt Royal
@MattRoyal A função funciona muito bem e estou usando-a para criar outras regras de htaccess. Como posso inserir as regras na parte superior do arquivo, acima das regras padrão do wp htaccess, por favor? No momento, as regras são adicionadas na parte inferior do arquivo htaccess. Obrigado.
21818 lowtechsun
Não concordo com a solução: 1- VOCÊ NÃO DEVE 777 nada em um servidor da web! Essa é apenas uma prática ruim em geral e leva a grandes falhas de segurança. 2- Você está adicionando uma gravação de arquivo em cada solicitação ao site, sendo uma ação de gravação que criará um bloqueio no arquivo, permitindo apenas uma gravação no momento em que você reduzirá o número de solicitações e responderá simultaneamente. 3- Um site não deve ter dependências do servidor em que é executado; se for migrado para um sistema em que o nginx é usado, por exemplo, ele deixará de funcionar conforme o esperado. ... continua
Eduardo Oliveira
4- Existem maneiras mais limpas de capturar erros stackoverflow.com/a/34619308/768516
Eduardo Oliveira