Mailing List Archive

Maybe I'm being silly but...
... it sure looks to me like the "Alias /foo/ /bar/" bug can be cured
by just stripping trailing slashes off both args (being moderately careful
to canonicalize "///" to "/" and not the empty string). Yes?

rst
Re: Maybe I'm being silly but... [ In reply to ]
>... it sure looks to me like the "Alias /foo/ /bar/" bug can be cured
>by just stripping trailing slashes off both args (being moderately careful
>to canonicalize "///" to "/" and not the empty string). Yes?

Maybe -- depends whether or not the aliasing routine remembers that
there used to be / on the end. For example

/foohead

should not be translated into

/barhead

....Roy
Re: Maybe I'm being silly but... [ In reply to ]
/foohead should not be translated into /barhead...

That check is already present in the code.

rst
Re: Maybe I'm being silly but... [ In reply to ]
Rst wrote:
>... it sure looks to me like the "Alias /foo/ /bar/" bug can be cured
>by just stripping trailing slashes off both args (being moderately careful
>to canonicalize "///" to "/" and not the empty string). Yes?

No.

and also
>I'm not sure I can even duplicate the problem as reported (the worst I
>can get a configuration with "Alias /foo/ /bar/" to do on 0.8.7 is not
>to properly redirect requests for /foo), but doing the strip-slash
>business I described in my earlier note today cures the symptoms I do
>observe.

The actual problem was:
Alias /foo /bar/
where /bar/index.html (or whatever) exists,

then URL:/foo returns /index.html, instead of /bar/index.html

The fix in 0.8.8 unfortuately introduces more incompatibilities than it fixes;
munging the paths to mask the true bug is not the best solution.

The bug is actually due to using the wrong test for when to redirect
a directory index. It currently tests for a missing PATH_INFO of "/", whereas
it should really test for the URL not ending in "/".

With a request of /foo, PATH_INFO is set to "/" (maybe this is wrong too),
so mod_dir.c does not redirect the request to /foo/. However, the point
of the test and redirect is to ensure that relative links in index.html
'work'; this depends on whether the URL ends in a '/' or not. So testing
the URL would be the 'correct' test anyway. A patch for 0.8.7 is supplied.

The fix in 0.8.8 makes it incompatible with the old NCSA behaviour;
specifically Alias /wom/ /bar/ would not match URL:/wom whereas it did
not previously.

Of course, the answer to the posters question should have been that
he should use
Alias /foo /bar
in preference.

David.

------------------------ Begin file dir.patch ------------------------------
*** mod_dir.c~ Tue Aug 1 01:46:52 1995
--- mod_dir.c Mon Aug 7 15:34:51 1995
***************
*** 762,768 ****

if (r->method_number != M_GET) return NOT_IMPLEMENTED;

! if (!r->path_info || *r->path_info != '/') {
char* ifile = pstrcat (r->pool, r->uri, "/", NULL);
table_set (r->headers_out, "Location",
construct_url(r->pool, ifile, r->server));
--- 762,768 ----

if (r->method_number != M_GET) return NOT_IMPLEMENTED;

! if (r->uri[0] == '\0' || r->uri[strlen(r->uri)-1] != '/') {
char* ifile = pstrcat (r->pool, r->uri, "/", NULL);
table_set (r->headers_out, "Location",
construct_url(r->pool, ifile, r->server));
------------------------ Begin file dir.patch ------------------------------