Un peu d'épice?
μ | 📰 | | 📧 |

    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