Page d'erreur personnalisée avec httpd
Ici je propose de modifier les sources d'httpd pour afficher une page d'erreur personnalisée.
Pour bien se comprendre :
- # : la commande doit être lancée avec les droits superutilisateur
- $ : la commande doit être lancée en simple utilisateur
- Les commandes sont à lancer sur une installation d'OpenBSD -stable. Sinon, suivez la FAQ.
Notez que toutes les pages d'erreurs, pas seulement la page 404 seront modifiées.
# user mod -G wsrc user $ cd /usr/src $ ftp -o /tmp/src.tar.gz $(head -n1 /etc/installurl)/$(uname -r)/src.tar.gz $ tar xzf /tmp/src.tar.gz
Ensuite, on va éditer les sources de httpd :
$ cd /usr/src/usr.sbin/httpd $ vi server_http.c
Vous devez modifier la fonction server_abort_http :
Dans la variable style, vous pouvez modifier le CSS. Ici, je définis une classe "bg" pour qu'elle ait une image en arrière-plan.
/* A CSS stylesheet allows minimal customization by the user */ style = "body { background-color: white; color: black; font-family: " "'Comic Sans MS', 'Chalkboard SE', 'Comic Neue', sans-serif; }\n" "hr { border: 0; border-bottom: 1px dashed; }\n" "body, html { height: 100%;font-family: 'Comic Sans MS', cursive;}\n" ".bg { background-image: url('/img/Calvin-Hobbes-lost.jpg');\n" "height: 100%;\n" "background-position: center;\n" "background-repeat: no-repeat;\n" "background-size: cover;\n" "}";
Ensuite, vous pouvez modifier le code html à proprement parler. J'y ajoute la classe "bg" au corps de la page, ainsi qu'un lien de retour vers une page précise de mon site.
/* Generate simple HTML error document */ if ((bodylen = asprintf(&body, "<!DOCTYPE html>\n" "<html>\n" "<head>\n" "<meta http-equiv=\"Content-Type\" content=\"text/html;" "charset=utf-8\"/>\n" "<title>%03d %s</title>\n" "<style type=\"text/css\"><!--\n%s\n--></style>\n" "</head>\n" "<body class='bg'>\n" "<h1>%03d %s</h1>\n" "<hr>\n<address>%s</address>\n" "<a href='/archive.html'>Retour \xc3\xa0 la page de recherche</a>\n" "</body>\n" "</html>\n", code, httperr, style, code, httperr, HTTPD_SERVERNAME)) == -1) { body = NULL; goto done; }
Ensuite on recompile :
$ make # make install # rcctl restart httpd