Exercice : un script CGI pour Apache

Vous avez déployé du contenu .html sur mon serveur unixshell.hetic.glassworks.tech dans un exercice précédent.

On peut aussi demander à Apache, au lieu juste de servir un fichier static, d'exécuter un script et renvoyer le résultat de ce script.

En pratique, Apache va récupérer le résultat du stdout de notre script, et le renvoyer au client.

Pour ce faire, il y aura quelques modifications à apporter :

  1. Dans votre fichier .htaccess il faut activer l'exécution des scripts via le module cgi :

Options +ExecCGI
AddHandler cgi-script .cgi

Si vous avez configuré vous même votre serveur Apache, il faut être sur d'avoir activé la lecture de .htaccess. Vous l'activez, site par site, dans /etc/apache2/sites-enabled/000-default.conf :

<VirtualHost *>
  ...
  <Directory /var/www/html/>
    # Cette ligne autorise que .htaccess soit lu 
    AllowOverride All
    Options -Indexes
    DirectoryIndex disabled
  </Directory>
  ...
</VirtualHost>

Ensuite, vous redémarrez Apache avec : systemctl restart apache2

  1. Ensuite on crée un script avec extension .cgi. Par exemple, index.cgi :

  1. Modifiez les droits de ce fichier pour le rendre exécutable :

A noter, si vous êtes administrateur de ce serveur, il faut d'abord activer le module CGI avec :

Vous pouvez ensuite consulter ce fichier à :

Rédigez un fichier text qui s'appelle "greeting.txt" et qui contient un message de bienvenue pour votre visiteur, par exemple:

Adaptez le script index.cgi pour lire ce fichier (avec cat par exemple), et renvoyer le résultat à l'utilisateur. L'idée est qu'on puisse modifier les contenus du fichier greeting.txt sans devoir modifier notre script.

Malgré le contenus de notre fichier greeting.txt, il faut toujours terminer la page avec le texte : Fin de page!.

Est-ce que les caractères spéciaux s'afficher correctement ? Comment résoudre ce problème ?

Solution

Mis à jour