Si observa el archivo de configuración principal de Apache2, /etc/apache2/httpd.conf
verá que hay dos cosas que deben hacerse para permitir que / Library / WebServer / CGI-Executables contenga los archivos cgi.
Primero, ya que no está cubierto por los permisos para el directorio del documento que está al lado, necesitará un bloque de "Directorio" para definir los permisos para todos los archivos y directorios que se encuentran debajo. En el caso de este directorio no permite que pase absolutamente nada. Esta es la razón por la que cuando apuntaste tu navegador al directorio, dijo que los permisos fueron denegados. No se preocupe, la segunda cosa permite que se ejecuten los archivos cgi en el directorio.
Segundo, necesita un comando "ScriptAlias" que le indique al servidor qué URL se usará para señalarlo, de modo que el servidor encuentre los archivos y permita que se ejecuten.
ScriptAliasMatch ^/cgi-bin/((?!(?i:webobjects)).*$) \
"/Library/WebServer/CGI-Executables/$1"
Esto básicamente dice "después de eliminar el nombre de host y luego cualquier URL que comience" / cgi-bin / "y continúa con un texto seguido de un punto seguido de otro texto que apunta a un archivo con un nombre que coincide con el último bit en el directorio "" / Library / WebServer / CGI-Executables / $ 1 "
Si desea colocar archivos CGI en uno de sus directorios de usuarios, deberá realizar algunos cambios en un archivo de configuración diferente. Encontrará el archivo de configuración para recursos compartidos de usuarios en / etc / apache2 / users con un archivo de configuración para cada usuario. Aquí hay un ejemplo:
<Directory "/Users/jessica/Sites/">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Para esto, tendrá que agregar "ExecCGI" a la línea "Opciones" para que pueda tener archivos CGI en su directorio de Sitios o debajo, o agregar un nuevo bloque de Directorio para su carpeta CGI. Se vería así: -
<Directory "/Users/jessica/Sites/CGI">
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Dado que esto está en nuestro DocumentRoot, no necesitamos usar ScriptAliasMatch.
(La segunda opción es la más segura.)