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,
  
  
  

Reply via email to