perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Eric Lease Morgan <>
Subject rewriterule, location, and perlhandler
Date Wed, 22 Jul 2009 01:32:20 GMT

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;



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

I then use my browser to go to the following URL, and it returns  
"hello, world!":

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, 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.

View raw message