Java Mailing List Archive

http://www.apache-httpd.com/

Home » modperl.perl »

rewriterule, location, and perlhandler

Eric Lease Morgan

2009-07-21

Replies: Find Java Web Hosting

Author LoginPost Reply

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.


©2008 apache-httpd.com - Jax Systems, LLC, U.S.A.