On 06/12/10 20:39, Philippe M. Chiasson wrote:
On 10-11-30 07:51 , "Alex J. G. Burzyński" wrote:
Hi,
I've noticed that when using custom directives within nested<Location>
the result of $r->location reports the parent one only, instead of the
subdir.
However if I add PerlSetVar the $r->location will report the correct one.
Yup, you've stumbled on an interesting bug.
I've found this while working on Apache2::Layer (on cpan)
The way to replicate:
please follow the example
http://perl.apache.org/docs/2.0/user/config/custom.html#Merging_at_Work
and now add:
--- httpd.conf-orig 2010-11-30 12:06:57.491843181 +0000
+++ httpd.conf 2010-11-30 12:07:39.217629859 +0000
@@ -18,6 +18,7 @@
PerlResponseHandler MyApache2::CustomDirectivesTest
</Location>
<Location /custom_directives_test/subdir>
+ PerlSetVar fix "problem"
MyPlus 1
MyList "SubDir"
MyAppend "SubDir"
The reason this makes a difference is that without it, there are no
mod_perl directives (the custom ones are 'special'), so no configuration
pass for modperl in that directory.
Side-effect of that is that $r->location isn't tracked proprely.
Keep in mind that r->location is not an httpd api, but rather something
convenient mod_perl tracks. But not in this case, unfortunately.
If you take a look at those (around lines 68-70):
http://pastebin.com/PUtcczwA (with PerlSetVar)
http://pastebin.com/kfjMtZsT (without PerlSetVar)
you'll see that PerlSetVar creates directory context, while custom
directive on its own does not.
However the Apache2::CmdParams->path returns the correct value and
that's what I'm using in my module as a workaround.
Thanks,
Alex