Comment créer des pages d'erreur 401, 403 et 500 personnalisées?

27

Lorsqu'une erreur 404 est rencontrée, un fichier de modèle 404.php peut être utilisé pour afficher un message d'erreur personnalisé. Ceci est documenté dans l' article de la hiérarchie des modèles .

Mon objectif est de créer des pages d'erreur personnalisées pour les erreurs 401, 403 et 500. J'ai essayé de créer des fichiers 401.php, 403.php et 500.php dans le répertoire de mon thème mais cela ne fonctionne pas.

Comment créer des pages d'erreur 401, 403 et 500 personnalisées dans WordPress?

Henrywright
la source
2
Vous pouvez essayer d'utiliser ce code comme point de départ: jesin.tk/wordpress-custom-403-401-error-page
Joe
Voici un plugin existant qui vous permet de personnaliser les pages d'erreur comme les erreurs 403 et 401: http://wordpress.org/plugins/custom-error-pages/ Tout ce que vous avez à faire est d'installer et d'activer. Cependant, vous devez modifier manuellement le fichier .htaccess (ou nginx.conf) spécifié dans la page d'options des plugins.
Pi Lover

Réponses:

15

Les pages d'erreur sont affichées via .HTACCESS, si vous utilisez Apache, vous utiliserez la ErrorDocumentdirective et y ajouterez le statut et l'URL.

Il ressemblerait donc à ceci dans votre fichier .htaccess:

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

Vous pouvez utiliser la fonction suivante ci-dessous. Cela ajoutera dynamiquement ce qui est nécessaire au fichier HTACCESS pour vous ou vous pouvez le faire manuellement.

1. Ajoutez des pages:

Vous devrez ensuite aller dans votre tableau de bord et créer les pages comme n'importe quelle page normale ('Dashboard'> 'Pages'> 'New'). Ils peuvent être intitulés comme vous le souhaitez, assurez-vous simplement que le slug est le même que dans la fonction ci-dessous (Slug: error-401, error-403, error-404, error-500). Vous pouvez également utiliser le modèle de page pour créer la mise en page et le style que vous souhaitez pour ces pages spécifiques. Suivez les instructions de WordPress Codex pour cela.

2. Ajouter une fonction:

// 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 !! REMARQUES SUR LA FONCTION CI-DESSUS

Lors du déplacement de votre site Web ou de la modification de la structure des URL

La chose à retenir avec la fonction ci-dessus est bien qu'elle vérifie si les directives ErrorDocument existent déjà avant de les écrire dans votre fichier HTACCESS, elle ne réécrira pas les directives ErrorDocument si vous modifiez ou déplacez votre blog pour refléter les emplacements de page mis à jour. Vous devez d'abord supprimer les directives ErrorDocument existantes dans votre fichier HTACCESS, puis réexécuter cette fonction pour créer les nouvelles directives.

Correct crochet pour déclencher la fonction UNE SEULE FOIS

L'autre chose à noter est cette fonction, l'utilisation de l' initaction s'exécutera à chaque fois que vos pages se chargent, ce qui est super inutile et inutile donc je suggérerais de l'ajouter à un plugin et d'utiliser register_activation_hookplutôt afin qu'il ne se déclenche qu'une seule fois lors de l'activation du plugin

Autorisations de fichier

Il est également impératif que votre .htaccess soit accessible en écriture lorsque vous utilisez la fonction ci-dessus, assurez-vous donc qu'il dispose des autorisations de fichier correctes, quelque chose comme CHMOD777.

Matt Royal
la source
Vous ne savez pas comment cela est censé fonctionner, les modifications ont-elles été apportées manuellement au fichier .htaccess, mais cela ne fonctionne pas. J'essaie de le faire sur localhost et cela devrait être possible sur localhost, car j'ai accès à tout, au serveur et au client. Mais pourquoi ça ne marche pas?
Solomon Closson
@SolomonClosson, vous pouvez peut-être essayer d'utiliser le plugin que j'ai écrit pour cela, il fera tout pour vous et suit exactement le code ci-dessus :). Plugin WordPress.Org officiel
Matt Royal
@MattRoyal La fonction fonctionne très bien et je l'utilise pour créer d'autres règles htaccess. Comment puis-je faire en sorte que les règles soient insérées tout en haut du fichier, au-dessus des règles par défaut de wp htaccess, s'il vous plaît? Pour le moment, les règles sont ajoutées au bas du fichier htaccess. Merci.
lowtechsun
Je ne suis pas d'accord avec la solution: 1- VOUS NE DEVEZ PAS 777 rien sur un serveur Web! C'est juste une mauvaise pratique en général et conduit à des failles de sécurité majeures. 2- Vous ajoutez une écriture de fichier sur chaque demande au site Web, étant une action d'écriture, cela créera un verrou sur le fichier ne permettant qu'une seule écriture à la fois, vous réduirez le nombre de demandes et répondrez simultanément. 3- Un site Web ne devrait pas avoir de dépendances du serveur sur lequel il s'exécute, s'il est migré vers un système où nginx est utilisé par exemple, il cessera de fonctionner comme prévu. ... continue
Eduardo Oliveira
4- Il existe des moyens plus propres de corriger les erreurs stackoverflow.com/a/34619308/768516
Eduardo Oliveira