On Wed 25 Jun 2008, titetluc titetluc wrote:
> PerlModule Test
> <Location /test_index/index.html>
> Require valid-user
> AuthType basic
> AuthName test_index
> SetHandler perl-script
>
> PerlAuthenHandler Apache2::AuthSSO::Test->set_user
>
> PerlResponseHandler Apache2::AuthSSO::Test->display_user
> </Location>
>
> In addition, I added an empty index.html file in the htdocs/test_index
> directory
>
> The Perl Test module is
>
> package Test;
> use warnings;
> use strict;
> use Carp;
>
> use Apache2::Const qw(:common);
>
> sub set_user {
> my ($self, $r) = @_;
> $r->user('myself');
> return OK;
> }
> sub display_user {
> my ($self, $r) = @_;
> my $user = defined $r->user ? $r->user : 'user is not defined';
> print $user;
> return OK;
> }
>
> 1;
>
> When I access with my browser to http://localhost/test_index/index.html,
> user is set to 'myself'
> BUT when I access with my browser to http://localhost/test_index/ ... user
> is not defined !!!
What happens here? When you access .../index.html your main request matches
the location condition and is served accordingly. If you access .../ the main
request goes through all phases up to fixup missing the location directives
because the condition does not match. In fixup mod_dir creates an URI subreq
for each DirectoryIndex.
mod_dir.c contains the following code:
/* The sub request lookup is very liberal, and the core map_to_storage
* handler will almost always result in HTTP_OK as /foo/index.html
* may be /foo with PATH_INFO="/index.html", or even / with
* PATH_INFO="/foo/index.html". To get around this we insist that the
* the index be a regular filetype.
*
* Another reason is that the core handler also makes the assumption
* that if r->finfo is still NULL by the time it gets called, the
* file does not exist.
*/
if (rr->status == HTTP_OK
&& ( (rr->handler && !strcmp(rr->handler, "proxy-server"))
|| rr->finfo.filetype == APR_REG)) {
ap_internal_fast_redirect(rr, r);
return OK;
}
You see, for the DirectoryIndex feature to work properly the index document
has to have an associated file. Your index document is a PerlResponseHandler.
So, I suspect there is no index.html file. In that case $r->filename
is "/path/to/test_index" and $r->path_info "index.html" for the subreq.
Use the source, Luke!
Now, I think you can make it working in one of these ways:
1) create .../test_index/index.html as a regular file.
2) redirect /test_index/index.html to a file (Alias ....).
Torsten
--
Need professional mod_perl support?
Just hire me: [EMAIL PROTECTED]