Bonjour à tous,
Impossible de faire fonctionner les scripts CGI dans un répertoire autre
que /cgi-bin/
J’ai un script printenv
[code]#!/usr/bin/perl
printenv – demo CGI program which just prints its environment
print “Content-type: text/plain\n\n”;
foreach $var (sort(keys(%ENV))) {
$val = $ENV{$var};
$val =~ s|\n|\n|g;
$val =~ s|"|\"|g;
print “${var}=”${val}"\n";
} [/code]
qui fonctionne bien lorsqu’il est placé dans /usr/lib/cgi-bin (et donc accessible via localhost/cgi-bin/printenv)
J’ai dans mon httpd.conf la directive initiale
<Directory />
Options SymLinksIfOwnerMatch
AllowOverride All
</Directory>
où j’ai remplacé None par All, puis
<Directory /var/www/>
Options Indexes ExecCGI Includes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Si je place le même script dans /var/www avec les mêmes droits à 755,
le serveur me propose d’enregistrer ce foutu fichier, mais ne l’exécute pas 
J’ai esayé en réduisant la ligne options à ExecCGI, mais non…
Impossible aussi d’exécuter un script s’il est dans un répertoire utilisateur.
[code]
UserDir public_html
Control access to UserDir directories. The following is an example
for a site where these directories are restricted to read-only.
<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
AllowOverride All
Options MultiViews ExecCGI Indexes SymLinksIfOwnerMatch IncludesNoExec
Order allow,deny
Allow from all
Order deny,allow
Deny from all
</Directory>
[/code]
Dans ce cas, j’ai d’abord essayé en ajoutant ExecCGI aux options, puis en commentant cette ligne et en plaçant cette directive dans un fichiers .htaccess, mais rien ne change. Je précise que ce fichier .htaccess est bien pris en compte, puisque selon que j’insère ou non l’option Indexes, mon serveur renvoie ou non la liste des fichiers de mon répertoire perso.
En fin de compte, examinant la partie qui concerne /cgi-bin, j’ai recopié le bloc suivant
<IfModule mod_alias.c>
ScriptAlias /brol/ /home/gv/public_html/
<Directory /home/gv/public_html/>
AllowOverride All
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
</IfModule>
et c’est le SEUL cas où ce script a bien été exécuté, mais dans ce cas, plus moyen d’accéder aux autres fichiers de ce répertoire, même en tapant leur url complète. Par exemple localhost/brol/logo.png me renvoie
Forbidden
You don’t have permission to access /brol/logo.png on this server.
et dans errors.log j’ai [Fri Dec 26 14:58:00 2008] [error] [client 127.0.0.1] file permissions deny server execution: /home/gv/public_html/logo.png
d’où je conclue que tous les fichiers de ce répertoire sont alors considérés comme des scripts à exécuter.
Bref, je pédale complètement…
J’ai récemment migré ce PC personnel d’une vieille Slackware vers une Debian Etch; tout fonctionnait normalement auparavant avec Apache, je ne comprends donc vraiment rien à ce qui se passe.
Merci d’avance pour tout éclaircissement,
Gauthier
