El Apache tiene activada la ejecución de CGI en el directorio /usr/lib/cgi-bin. Si vas a colocar los CGI en otro directorio, se lo tienes que decir.
Por ejemplo, en mi
/etc/apache2/httpd.conf tengo puestas estas líneas:
Using text Syntax Highlighting
## CGI. Configuración para todos los dominios
AddHandler cgi-script .cgi .sh .pl .ida
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
#ScriptAlias /cgi/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin/">
AllowOverride None
Options ExecCGI FollowSymLinks -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
<Directory "/home/*/cgi">
AllowOverride Options
Options +ExecCGI
SetHandler cgi-script
</Directory>
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
El AddHandler relaciona las extensiones de los archivos con la ejecución de CGI. Sólo con esto sería suficiente como para poder ejecutar CGI en cualquier parte, pero puede que ciertos directorios estén protegidos de esa ejecución.
ScriptAlias relaciona la parte final de la URL con el directorio donde queremos que mire por los CGI del sistema (los que no pertenecen a un usuario en particular.
Los dos Directory definen los dos lugares donde se pueden encontrar los CGI, y los permisos de ejecución de ellos. El primero se refiere al directorio del sistema, y el segundo a los directorios cgi/ dentro de los
home de los usuarios. En los dos casos, lo que nos interesa es activar la ejecución de CGI (
+ExecCGI). En el segundo, además, indicamos que todos los archivos dentro de cgi/ serán ejecutables como CGI (con SetHandler).
Una vez puesto esto, y reiniciado el servidor Apache, tenemos
http://localhost/cgi-bin/programa.plpara ejecutar el cgi programa.pl que está en /usr/lib/cgi-bin/, y
http://localhost/~usuario/cgi/programa.plpara ejecutar el cgi programa.pl que está en la carpeta cgi/ dentro del directorio del usuario
usuario.
Debes entrar en la configuración de tu Apache y ver dónde tienes que colocar los CGI. Si
/var/www/public_html/cgi-bin/programa.pl es el directorio de los CGI del sistema, en la configuración del Apache debe tener activado el ExecCGI, y el AddHandler o el SetHandler.
En el /var/log/apache2/error.log tendrás más información de lo que está pasando.