Hi Randolf.

I mark this OT because it is not directly related to the OP's initial question.
But maybe a nitpick :
The httpd documentation on AcceptPathInfo is certainly interesting to read (and in years of working with Apache httpd and mod_perl I have never seen it before), but I believe that your recommendation below is not entirely accurate. You do not /need/ to add "AccepPathInfo On", in order to have access to the "path" component in a mod_perl handler.
And even your example would work perfectly without it.
That is because the default value of this setting, is already to let the handler decide itself, if the request URI should be accepted or not.
For example, for your example, if you had this configuration :
<Location /profile/>
  SetHandler mod_perl
  PerlResponseHandler my::module->handler
then, any request with a URI starting with "/profile/" would be honored by Apache, and passed to my::module::handler(), and it would be my::module::handler() which gets to decide what to do with whatever follows the leading "/profile/". Including obtaining the rest of that URI (via $r->uri or $r->path_info), parse it, interpret it as parameters or not, reject it with a 404, or whatever. With the Location above, Apache httpd won't even /look/ at whether this path really exists on the filesystem, which means that the AcceptPathInfo, whatever its setting is, won't even come into play (it also does not hurt, whatever you set it to). It only plays a role, when the response handler is /not/ yours (like in the filter example shown in the httpd documentation), and you want to override whathever this other handler would normally do in that case.

To tell the entire truth, I have not really tested the above specifically. But that is what the documentation (and my apache/mod_perl experience) tells me.
(I do many things with paths also, and have never needed this setting before).

On 07.08.2017 18:53, Randolf Richardson wrote:
        In your "httpd.conf" file (for your VirtualHost if you're using
virtual hosts) you'll need to add this line:

                AcceptPathInfo        On

        Then you may find the documentation surrounding $r->path_info to be
of particular interest, which you can read about here:


        I use this to implement simple URIs on sites that look like
"/profile/29862938728" instead of "/profile?id=29862938728" to make
it easier for users to share links.  Based on your question, it seems
to me that you're wanting to know how to do something like this.

        Of course, you'll need to write your own Perl code to handle these
requests, and I suspect that's likely what you're wanting to do.  One
thing I find very helpful in having done this myself is the use of
the 404 response code when the data is wrong (e.g., the profile ID
number does not exist in the database) because then the web server
just passes everything along to whatever I have configured separately
for the 404 handler (this is important because it properly
communicates to search engine spiders and other automated systems
that the page doesn't exist and should be ignored).


for this like request:
curl http://dns-api.org/AAAA/dns-api.org

in Dancer we could write:

get '/:type/:domain/?' => sub {

     my $rtype  = params->{ 'type' };
     my $domain = params->{ 'domain' };

But in a MP handler, how could we get the similiar result, treating
request path as GET/POST arguments?

Randolf Richardson - rand...@inter-corporate.com
Inter-Corporate Computer & Network Services, Inc.
Beautiful British Columbia, Canada

Reply via email to