You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Eric Prud'hommeaux <er...@w3.org> on 2003/03/03 20:43:55 UTC

.foo files in the same dir must have the same content-type and charset

In general, AddType/AddCharset directives provide general rules for
file extensions. mod_negotiation.c:handle_map_file provides a way to
do negotiation based on rules supplied in file.var rather than the
AddType/AddCharset rules for *.html.
for the purposes of content negotiation.

The problem is that these Content-Type/Language parameters are used for the negotiation

static int handle_map_file(request_rec *r)
{
    negotiation_state *neg = parse_accept_headers(r);
    var_rec *best;
    int res;

    char *udir;

//  read .htaccess:
//    AddType text/html;charset=iso-8859-1 html htm
//  override with foo.var:
//    URI: foo.html
//    Content-Type: application/xhtml+xml; charset=UTF-8; qs=0.99
//    Content-Language: en
    if ((res = read_type_map(neg, r))) {
        return res;
    }

//  find the characteristics of the best choice:
    res = do_negotiation(r, neg, &best, 0);
    if (res != 0) return res;

    if (r->path_info && *r->path_info) {
        r->uri[ap_find_path_info(r->uri, r->path_info)] = '\0';
    }
    udir = ap_make_dirstr_parent(r->pool, r->uri);
    udir = ap_escape_uri(r->pool, udir);
//  throw away everything except the file_name of the best choice:
    ap_internal_redirect(ap_pstrcat(r->pool, udir, best->file_name,
                                    r->path_info, NULL), r);
    return OK;
}

It seems like making headers from best and stuffing them into r's
headers_out would be a good way to solve this. ap_internal_redirect
copies the new headers from the r (via internal_internal_redirect) and
i THINK that headers won't be replaced if they're already set.

gdb'd apache 1.3.27
looked at 2.something-or-other
-- 
-eric

office: +1.617.258.5741 NE43-344, MIT, Cambridge, MA 02144 USA
cell:   +1.857.222.5741

(eric@w3.org)
Feel free to forward this message to any list for any purpose other than
email address distribution.