Se dai un'occhiata al principale file di configurazione di Apache2, /etc/apache2/httpd.conf
vedrai che ci sono due cose da fare per consentire a / Library / WebServer / CGI-Executables di contenere i file cgi.
Innanzitutto, poiché non è coperto dalle autorizzazioni per la directory del documento adiacente, sarà necessario un blocco "Directory" per definire le autorizzazioni per tutti i file e le directory sottostanti. Nel caso di questa directory non consente assolutamente nulla. Questo è il motivo per cui quando hai puntato il tuo browser nella directory ha detto che le autorizzazioni sono state negate. Non preoccuparti, la seconda cosa consente ai file cgi in di eseguire la directory.
In secondo luogo, ha bisogno di un comando "ScriptAlias" che indica al server quale URL verrà utilizzato per puntarlo in modo che il server trovi i file e consenta loro di essere eseguiti.
ScriptAliasMatch ^/cgi-bin/((?!(?i:webobjects)).*$) \
"/Library/WebServer/CGI-Executables/$1"
Questo in pratica dice "dopo aver rimosso il nome host, qualsiasi URL che inizia" / cgi-bin / "e continua con una parte di testo seguita da un punto seguito da un'altra parte di testo punta a un file con un nome corrispondente al ultimo bit nella directory "" / Libreria / WebServer / CGI-Executables / $ 1 "
Se si desidera posizionare i file CGI in una delle directory utente, sarà necessario apportare alcune modifiche a un altro file di configurazione. Troverete il file di configurazione per le condivisioni utente in / etc / apache2 / users con un file di configurazione per ciascun utente. Ecco un esempio:
<Directory "/Users/jessica/Sites/">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
A questo dovrai aggiungere "ExecCGI" alla riga "Opzioni" in modo da poter avere file CGI ovunque nella directory di Sites o sotto o aggiungere un nuovo blocco di directory per la tua cartella CGI. Sarebbe come questo: -
<Directory "/Users/jessica/Sites/CGI">
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Poiché questo è in il nostro DocumentRoot non è necessario utilizzare ScriptAliasMatch.
(La seconda opzione è la più sicura.)