-
- my $path = $ENV{PATH_TRANSLATED};
- $ENV{PLP_NAME} = $ENV{PATH_INFO};
- my $path_info;
- while (not -f $path) {
- if (not $path =~ s/(\/+[^\/]*)$//) {
- print STDERR "PLP: Not found: $ENV{PATH_TRANSLATED} ($ENV{REQUEST_URI})\n";
- PLP::error(undef, 404);
- exit;
+ $PLP::read = \&read;
+
+ if (defined $ENV{PATH_TRANSLATED}) {
+ # SCRIPT_* points to handler script (Apache CGI)
+ # Run backwards through PATH_TRANSLATED to find target filename,
+ # then get file (relative) by stripping PATH_INFO.
+ my ($path, $rel) = (delete $ENV{PATH_TRANSLATED}, delete $ENV{PATH_INFO});
+ my $path_info;
+ while (not -f $path) {
+ if (not $path =~ s/(\/+[^\/]*)$//) {
+ printf STDERR "PLP: Not found: $path$path_info ($ENV{REQUEST_URI})\n";
+ PLP::error(undef, 404);
+ return;
+ }
+ # move last path element onto PATH_INFO
+ $path_info = $1 . $path_info;
+ }
+ if (defined $path_info) {
+ $rel =~ s/\Q$path_info\E$//;
+ $ENV{PATH_INFO} = $path_info;