How do I get Apache's RewriteRule, Location, and PerlHander to work
nicely together?
I have a the following Hello World mod_perl module:
package Apache2::Alex::SemanticWeb;
use Apache2::Const -compile = qw( OK );
use strict;
sub handler {
my $r = shift;
$r-content_type( 'text/html' );
$r-print( 'hello, world!' );
return Apache2::Const::OK;
}
1;
I then touch a file named semantic-web.cgi.
I then add a Location directive to httpd.conf:
Location /sandbox/semantic-web.cgi
SetHandler perl-script
PerlHandler Apache2::Alex::SemanticWeb
/Location
I then use my browser to go to the following URL, and it returns
hello, world!:
http://infomotions.com/sandbox/semantic-web.cgi
Great and wonderful.
I now want to implement a RewriteRule -- a la a cool linked data URL
-- to redirect URLs with a specific shape to SemanticWeb.pm, and I use
the following:
RewriteRule ^/etexts/id/(.*) /sandbox/semantic-web.cgi?id=$1
In other words, all request starting with /etexts/id should be
redirected (rewritten) to go to semantic-web.cgi. Unfortunately, all
requests go directly to the touched file and not to my Perl package;
the Location directive seems by-passed. When I remove semantic-web.cgi
from my file system I get a 404 error (file not found).
What am I doing wrong? Does an actual file need to exist in order for
mod_perl to find it? How should I edit httpd.conf so I can: 1) rewrite
GET requests, and 2) execute the result in a mod_perl module?
--
Eric Lease Morgan
Infomotions, Inc.