Hi,


J. Peng wrote:
On Fri, Feb 29, 2008 at 7:03 PM, Torsten Foertsch
<[EMAIL PROTECTED]> wrote:
 Example continued: The entry /var/www/a/b exists on disk either as file or as
 directory but /var/www/a/b/c does not. Then after MapToStorage $r->filename
 is /var/www/a/b and $r->path_info is /c/d/e.
Sorry I can't understand for this. If /var/www/a/b exists but
/var/www/a/b/c not, why user requests it? What's $r->path_info? How to
get path_info from filename? thanks again.


I'm not sure if I can help by cutting in here as I'm some what learning Apache and modperl myself.

$r is not a file or a filename. This is Perl, remember? :-) So, $r is a scalar variable and, to be precise, the global variable for the Apache RequestRec object. Take a look at:

http://perl.apache.org/docs/2.0/api/Apache2/RequestRec.html

and

http://perl.apache.org/docs/2.0/api/Apache2/RequestRec.html#C_path_info_

to see what Torsten meant by the "path_info".

As for /var/www/a/b/c, a user can request for a file that does not exists. The key is what Torsten said about "walking the hierarchy". So, if /var/www/a/b/c/d/e does not exist, it sees if /var/www/a/b/c/d exists. If not, it tries /var/www/a/b/c/. It continues doing this, "walking [up] the hierarchy", until it finds a match. In Torsten's example, this would be:

/var/www/a/b/

Then, the RequestRec object now stores two parts. A filename "/var/www/a/b/" and a path_info "/c/d/e". Why would you want to do that. Well, an example that I saw in the Mason Book (Note: don't confuse yourself with learning this right now, but I just want to mention where I got the example from) which helped me understand this was as follows. Say you have a news site like:

http://example.com/archive/news/2008/02/29/index.html

A user might request that, but it wouldn't make sense to have 365 "index.html"'s every year (ok, 366 this year :-) ). Instead, you could do a trick above and keep going up the hierarchy until you have a filename "/var/www/archive/news/" and a path_info "/2008/02/29/index.html". You can then use the path_info as a query string to some database to retrieve today's news. i.e., you don't actually have a file sitting at:

/var/www/archive/news/2008/02/29/index.html

but the user doesn't know this and probably doesn't care as long as s/he can see today's news.

I hope this helps and I hope I didn't mess up your example, Torsten. If so, please correct me for my benefit, as well! :-)

Ray




Reply via email to