Re: How Do I change the Document Root Per Request

"David E. Wheeler" <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
On Mar 6, 2015, at 5:29 PM, David E. Wheeler <[email protected]> wrote:

> And now it works just how I want.

I take it back. It works for files in the root, but not subdirectories.

So say my document root is /var/html, and a request comes in for /foo/bar.html. Apache has mapped it to /var/html/foo/bar.html, but in my PerlTypeHandler, I re-map it to /var/html/david/foo/bar.html and set finfo:

  sub handler {
      my $r = shift;

      # We only want to do this once per request.
      return DECLINED unless $r->is_initial_req;

      # Get the username.
      my $user = $r->user or return HTTP_UNAUTHORIZED;

      # Return forbidden if the subscriber ID subdirectory does not exist.
      my $doc_root = $r->document_root;
      my $sub_root = File::Spec->catdir($doc_root, $user);
      return HTTP_FORBIDDEN unless -d $sub_root;

      # 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?

Thanks,

David
smime.p7s (application/pkcs7-signature, 4 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.