SOLVED! Apache mod_perl + mod_cgi in same directory
Thanks Keith for your suggestions. In the end, I settled upon a variation of
what you suggested.
My goal: to allow my users to create static and dynamic HTML pages in their
own home directories using both CGI and PERL as they liked. Basically, I
wanted to be able to serve CGI and PERL-CGI out of the same directory.
The Problem: mod_cgi and mod_perl both provide CGI services. If you attempt
to set them up under the same directory, only one of them will work.
The Solution:
NOTE: I use only one config file: httpd.conf in accordance with current
Apache configuration practices.
1. I enabled mod_userdir during installation of my Apache 1.3.17 server and
set the UserDir to "public_html". This means that anywhere under the
user's home directory, they can create a "public_html" directory from
which to serve web pages:
<IfModule mod_userdir.c>
UserDir public_html
</IfModule>
2. I disabled the UserDir for Root, per suggestion from Apache's website:
UserDir disabled root
3. I set the controls on the public_html directory as follows:
<Directory "/home/*/public_html">
Options +ExecCGI +Includes +Indexes
AllowOverride None
Order Allow,Deny
Allow from All
</Directory>
4. CGIs are enabled in the public_html directory (+ExecCGI) and can be
served from outside /usr/local/apache/cgi-bin because the following lines
were enabled in the mod_mime section of the configuration file:
AddHandler cgi-script .cgi
Now, any file ending in ".cgi" will be handled by the "cgi-script" handler
5. I wanted something equivalent to step four for handling perl-script files.
The solution was to create a LocationMatch so that any URL ending in a
predefined regular expression would be handed off to the PerlHandler. The
form of the expression to be matched was "/somefile.pl"
<LocationMatch "\/*\.pl$">
SetHandler perl-script
PerlHandler Apache::Registry
PerlSendHeader On
</LocationMatch>
Caveats: This is not the most secure solution in the world. If you do not
personally know your users, as I do, and/or you do not trust them, I suggest
you stick with the Apache recommended approach of creating a cgi-bin and/or
perl-bin directories and only allow cgi's served out of those directories.
Since my webserver is for development purposes, I wanted greater flexibility.
Now both .cgi and .pl files can reside in the same directory and each is
handled by the appropriate Handler.
robert a. jacobs
Reply to: