If we do not know a C-T for a subreq, we *must* propogate that
non-knowledge upwards to the main request.
Previously, if you used a DirectoryIndex with a file without a C-T (say
.shtml without AddType), the r->content_type will be kept as
httpd/unix-directory when we promoted the subreq in mod_dir. Since there
would be no handler on this file, ap_invoke_handler (config.c:355) would
set the handler to be httpd/unix-directory (which was the old C-T of the
dir). This would then trigger the handler to become httpd/unix-directory.
mod_autoindex would then try to serve the request. But, the filename
was propogated upwards by mod_dir's DirectoryIndex via
internal_fast_redirect - it would then return a 403 trying to generate a
mod_autoindex page for a file.
Now, we will use ap_default_type() which is correct.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94676
13f79535-47bb-0310-9956-
ffa450edef68
Changes with Apache 2.0.36
+ *) Fix subreqs with non-defined Content-Types being served improperly.
+ [Justin Erenkrantz]
+
*) Merge in latest GNU config.guess and config.sub files. PR 7818.
[Justin Erenkrantz]
AP_DECLARE(void) ap_set_content_type(request_rec *r, const char *ct)
{
- if (!r->content_type || strcmp(r->content_type, ct)) {
+ if (!ct) {
+ r->content_type = NULL;
+ }
+ else if (!r->content_type || strcmp(r->content_type, ct)) {
r->content_type = ct;
/* Insert filters requested by the AddOutputFiltersByType
r->args = rr->args;
r->finfo = rr->finfo;
r->handler = rr->handler;
- if (rr->content_type) {
- ap_set_content_type(r, rr->content_type);
- }
+ ap_set_content_type(r, rr->content_type);
r->content_encoding = rr->content_encoding;
r->content_languages = rr->content_languages;
r->per_dir_config = rr->per_dir_config;