Mercurial > pub > Impl
comparison Lib/IMPL/Web/QueryHandler/PageFormat.pm @ 162:39c8788eded5
corrected PATH_INFO handling
author | wizard |
---|---|
date | Wed, 29 Dec 2010 16:55:24 +0300 |
parents | 3f09584bf189 |
children | 4267a2ac3d46 |
comparison
equal
deleted
inserted
replaced
161:47c9877ccacc | 162:39c8788eded5 |
---|---|
18 | 18 |
19 BEGIN { | 19 BEGIN { |
20 public property templatesCharset => prop_all; | 20 public property templatesCharset => prop_all; |
21 public property templatesBase => prop_all; | 21 public property templatesBase => prop_all; |
22 public property includes => prop_all | prop_list; | 22 public property includes => prop_all | prop_list; |
23 public property defaultTarget => prop_all; | |
24 public property pathinfoPrefix => prop_all; | 23 public property pathinfoPrefix => prop_all; |
25 public property cache => prop_all; | 24 public property cache => prop_all; |
26 public property preprocess => prop_all; | 25 public property preprocess => prop_all; |
27 public property formatOutput => prop_all; | 26 public property formatOutput => prop_all; |
28 public property template => prop_all; | 27 public property template => prop_all; |
46 $this->templatesBase($ENV{DOCUMENT_ROOT}) unless $this->templatesBase; | 45 $this->templatesBase($ENV{DOCUMENT_ROOT}) unless $this->templatesBase; |
47 | 46 |
48 my ($requestUri) = split /\?/, $ENV{REQUEST_URI}; | 47 my ($requestUri) = split /\?/, $ENV{REQUEST_URI}; |
49 | 48 |
50 my $pathInfo; | 49 my $pathInfo; |
50 my @root = (''); | |
51 my @base; | |
51 | 52 |
52 if ( $requestUri eq $ENV{SCRIPT_NAME}.$ENV{PATH_INFO} ) { | 53 if ( $requestUri eq $ENV{SCRIPT_NAME}.$ENV{PATH_INFO} ) { |
53 # CGI with path info | 54 # CGI with path info, for example |
55 # /base/cgi-bin/myscript.cgi/path/info | |
56 # PATH_INFO will be /path/info | |
54 $pathInfo = $ENV{PATH_INFO}; | 57 $pathInfo = $ENV{PATH_INFO}; |
55 } else { | 58 } else { |
56 die "REQUEST_URI: $requestUri\nPATH_INFO: $ENV{PATH_INFO}" unless $requestUri eq $ENV{PATH_INFO}; | 59 # usual url, for exmaple |
60 # /base/script.cgi will have PATH_INFO /base/script.cgi | |
61 # /base/ will have PATH_INFO /base/index.cgi (if index.cgi is a DirectoryIndex) | |
62 $pathInfo = $ENV{PATH_INFO}; | |
63 | |
64 if (my $rx = $this->pathinfoPrefix) { | |
65 $requestUri =~ s/^($rx)//; | |
66 $pathInfo =~ s/^($rx)//; | |
67 push @root, grep $_, split /\//, $1 if $1; | |
68 } | |
57 } | 69 } |
58 | 70 |
59 my @root = (''); | |
60 my @base; | |
61 | |
62 if (my $rx = $this->pathinfoPrefix) { | |
63 $requestUri =~ s/^($rx)//; | |
64 push @root, grep $_, split /\//, $1 if $1; | |
65 } | |
66 | |
67 $pathInfo = $requestUri unless defined $pathInfo; | |
68 | |
69 @base = grep $_, split /\//, ($pathInfo ? substr $requestUri,0, -length($pathInfo) : $requestUri); | 71 @base = grep $_, split /\//, ($pathInfo ? substr $requestUri,0, -length($pathInfo) : $requestUri); |
70 | 72 |
71 local $ENV{PATH_INFO} = $pathInfo || $this->defaultTarget; | 73 local $ENV{PATH_INFO} = $pathInfo; |
72 | 74 |
73 my @path = grep $_, split /\//, ($ENV{PATH_INFO} || '') or die new IMPL::Exception("PATH_INFO is empty and no defaultTarget specified" ); | 75 my @path = grep $_, split /\//, ($ENV{PATH_INFO} || '') or die new IMPL::Exception("PATH_INFO is empty and no defaultTarget specified" ); |
74 | 76 |
75 my @pathContainer = @path; | 77 my @pathContainer = @path; |
76 pop @pathContainer; | 78 pop @pathContainer; |