rse 98/05/21 03:48:36
Modified: src CHANGES src/modules/standard mod_rewrite.c Log: Make sure a MIME-type can be forced via a RewriteRule even when no substitution takes place, for instance via the following rule: RewriteRule ^myscript$ - [T=application/x-httpd-cgi] This was often requested by users (not only the submitter of the bug report) in the past to force a single script without a .cgi extension and outside any cgi-bin dirs to be executed as a CGI program. PR: 2254 Revision Changes Path 1.859 +7 -0 apache-1.3/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.858 retrieving revision 1.859 diff -u -r1.858 -r1.859 --- CHANGES 1998/05/21 04:11:23 1.858 +++ CHANGES 1998/05/21 10:48:33 1.859 @@ -1,5 +1,12 @@ Changes with Apache 1.3b7 + *) Make sure a MIME-type can be forced via a RewriteRule even when no + substitution takes place, for instance via the following rule: + ``RewriteRule ^myscript$ - [T=application/x-httpd-cgi]'' This was often + requested by users in the past to force a single script without a .cgi + extension and outside any cgi-bin dirs to be executed as a CGI program. + [Ralf S. Engelschall] PR#2254 + *) A fix for protocol issues surrounding 400, 408, and 414 responses. [Ed Korthof] 1.106 +29 -1 apache-1.3/src/modules/standard/mod_rewrite.c Index: mod_rewrite.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_rewrite.c,v retrieving revision 1.105 retrieving revision 1.106 diff -u -r1.105 -r1.106 --- mod_rewrite.c 1998/05/20 15:34:26 1.105 +++ mod_rewrite.c 1998/05/21 10:48:35 1.106 @@ -1794,6 +1794,32 @@ /* and add the variable to Apache's structures */ add_env_variable(r, env); } + if (p->forced_mimetype != NULL) { + if (perdir == NULL) { + /* In the per-server context we can force the MIME-type + * the correct way by notifying our MIME-type hook handler + * to do the job when the MIME-type API stage is reached. + */ + rewritelog(r, 2, "remember %s to have MIME-type '%s'", + r->filename, p->forced_mimetype); + ap_table_setn(r->notes, REWRITE_FORCED_MIMETYPE_NOTEVAR, + p->forced_mimetype); + } + else { + /* In per-directory context we operate in the Fixup API hook + * which is after the MIME-type hook, so our MIME-type handler + * has no chance to set r->content_type. And because we are + * in the situation where no substitution takes place no + * sub-request will happen (which could solve the + * restriction). As a workaround we do it ourself now + * immediately although this is not strictly API-conforming. + * But it's the only chance we have... + */ + rewritelog(r, 1, "[per-dir %s] force %s to have MIME-type " + "'%s'", perdir, r->filename, p->forced_mimetype); + r->content_type = p->forced_mimetype; + } + } return 2; } @@ -1951,7 +1977,9 @@ * Finally we had to remember if a MIME-type should be * forced for this URL (`RewriteRule .. .. [T=<type>]') * Later in the API processing phase this is forced by our - * MIME API-hook function. + * MIME API-hook function. This time its no problem even for + * the per-directory context (where the MIME-type hook was + * already processed) because a sub-request happens ;-) */ if (p->forced_mimetype != NULL) { ap_table_setn(r->notes, REWRITE_FORCED_MIMETYPE_NOTEVAR,