On Wed, Mar 11, 2015 at 1:25 PM, David E. Wheeler <da...@justatheory.com>
wrote:

> On Mar 11, 2015, at 9:59 AM, David E. Wheeler <da...@justatheory.com>
> wrote:
>
> >      # Set the filename.
> >      my $file = File::Spec->catfile($sub_root, substr $r->uri, 1);
> >      $r->filename($file);
> >      $r->finfo(APR::Finfo::stat($file, APR::Const::FINFO_NORM,
> $r->pool));
> >      return DECLINED;
> > }
> >
> > I have no PerlReponseHandler, so Apache handles the response…and returns
> 404. Note that a request for /hi.txt; it’s only a request in a
> subdirectory, /foo/bar.html, that fails. Why? Why isn’t Apache able to find
> that file? Is there some other attribute of $r I need to set or unset?
>
> Turns out I was able to fix this issue by unsetting path_info. I just added
>
>     $r->path_info(undef);
>
> To the above code, and now Apache can find the file.
>
> I do not understand the relationship between filename (which is often not
> the full path to a file) and path_info. Fortunately, it looks like I don’t
> have to. But we might want to consider updating the docs to recommend
> unsetting path_info when setting the full path to a file in filename.
>
>
That is very curious. What was in path_info before? Is this a difference
between undef and ""? Because path_info shouldn't be involved in finding
the file, unless Apache is configured to ignore path info. And even that
doesn't make sense because you weren't testing with
/foo/bar.html/extra/pathinfo

You could also check how this directive affects the problem (whether it
should be turned off, or if your handler needs accept / deny the path info
as with the 'default' argument:

AcceptPathInfo On

I found this on apache 2.4's docs:
http://httpd.apache.org/docs/current/mod/core.html#AcceptPathInfo


Best,
>
> David
>
>

Reply via email to