Hi,
Since Apache 2.2, one has to turn on AcceptPathInfo
in order to correct directory mispelings:
<IfModule mod_speling.c>
CheckSpelling On
AcceptPathInfo On
</IfModule>
This is because mod_speling has the following code:
[[
/* we default to reject path info (same as core handler) */
if ((r->used_path_info != AP_REQ_ACCEPT_PATH_INFO) &&
r->path_info && *r->path_info) {
return DECLINED;
}
]]
Having to turn on the AcceptPathInfo to be able to use
mod_speling seems wrong. When Apache is parsing a URI and
doesn't find an equivalent filename, it is storing the
"extra" information into r->path_info. However, unless
AcceptPathInfo is turned on, mod_speling won't even try
to fix the spelling.
For example, the following URI is a valid one:
http://www.w3.org/TR/2004/WD-ccxml-20040430/
If AcceptPathInfo has a value different than On, we will
get a 404 status on the following (TR spelled as tr):
http://www.w3.org/tr/2004/WD-ccxml-20040430/
thus defeating the benefits of using of mod_speling.
On the other hand, if you turn on AcceptPathInfo, you
get mod_speling to work. On the other hand, you
are accepting PathInfo even if you don't want, and even
if it's a bogus. Any time a file foo.ext exists, requests for
foo/* are served with 200 OK status. e.g.,
http://www.w3.org/MarkUp/Overview/asdf
http://www.w3.org/MarkUp/Overview.html/asdf
Moreover, this breaks the browser-side resolution of
relative links.
Our stats show that Apache 1.x didn't accept bogus PathInfo. The
above URIs would return a 404 status, just as if we had
never enabled AcceptPathInfo in 2.2.
Is there any special reason as to why mod_speling is running
conditional to the value of AcceptPathInfo? I don't see
any benefit to it as you have to enable AcceptPathInfo for your
server and you get side effects.
Does it make sense to remove that check from mod_speling?
Thanks,
-jose