Rendez-vous sur Arrakiss
Le 08/10/2019 à 15:14 dans /Logiciel-libre/OpenBSD/

Page d'erreur personnalisée avec httpd

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('/Images/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