On Fri 29 Feb 2008, J. Peng wrote: > btw, mapping uri to disk sources in apache2 was done in > MapToStorageHandler rather than Trans handler, is it?
The Trans handler's task is to decide which file on disk belongs to a certain URI. So when the Trans handler is done $r->filename must not be empty. Example: the browser asks for /a/b/c/d/e, DocumentRoot is /var/www. Then after the core Trans handler $r->filename would be /var/www/a/b/c/d/e. MapToStorage's task is it then to walk the directory hierarchy, look for .htaccess files, apply configurations and compute $r->path_info based on $r->filename. During this process $r->finfo is filled. Hence, you have to fill it yourself if you change $r->filename after MapToStorage. 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. There is another subtle point, the Trans phase can be skipped entirely. This happens for file subrequests. In perl they are created by $r->lookup_file rather than $r->lookup_uri. Such subrequests have an empty $r->uri but a non-empty $r->filename in the first place. And since there is no URI there is nothing to translate. They are quite seldom. If asked I'd instantly know of only one place, mod_negotiation. Torsten