rendez-vous sur ArraKISS
Archives ContactATOM
whoami@ybad.name
# find . -iname

    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 :

    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