using Perl and Apache on OS X
I’m trying to do some work with a Perl app on my Powerbook but I was unable to get any Perl scripts to execute from my local server. At first, I was getting just the source of the Perl files spit back at me. I followed a few tutorials about getting /etc/httpd/httpd.conf set up, but then I kept getting 403 Forbidden errors when I tried to access .pl or .cgi files in my browser. I checked /var/log/httpd/error_log and saw:
[Thu Mar 22 10:55:17 2007] [error] [client 127.0.0.1] Options ExecCGI is off in this directory: /Users/sarah/Sites/test.cgi
I thought to myself, “B.S.! ExecCGI is on for that directory!” Sure enough, in my httpd.conf file, I had:
<Directory /Users/*/Sites>
AllowOverride FileInfo AuthConfig Limit
Options <strong>ExecCGI</strong> MultiViews Indexes SymLinksIfOwnerMatch Includes
DirectoryIndex index.htm index.html index.cgi
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
I had restarted Apache with sudo apachectl graceful
, so what was up? Then I noticed something else in error_log:
Processing config directory: /private/etc/httpd/users/*.conf Processing config file: /private/etc/httpd/users/sarah.conf
What was this /private/etc/httpd/users/sarah.conf that it was talking about? I had never created this file. I checked and it certainly existed. It also had an Options line without ExecCGI—bingo! I simply removed the file because it was just redefining what I had already specified in httpd.conf for Users/*/Site tutorials (shown above). I then restarted Apache and voila, my scripts worked. :) I can only assume something auto-generated that file, because it certainly wasn’t me.
Other things to check if you’re still seeing the source of your scripts or getting a 403 error:
- Is your script executable? Chmod it to 755 to be sure.
- Ensure these lines are uncommented in your /etc/httpd/httpd.conf (or whatever your Apache config file is):
LoadModule cgi_module libexec/httpd/mod_cgi.so
LoadModule perl_module libexec/httpd/libperl.so
AddModule mod_cgi.c
AddModule mod_perl.c
AddHandler cgi-script .cgi .pl
- Be sure to restart Apache after making any config file changes. You can do this via Terminal with the command
sudo apachectl graceful
, which will prompt you for your password, or via System Preferences > Sharing, where you Stop “Personal Web Sharing” and Start it again.