coar        98/07/23 04:34:02

  Modified:    src/modules/standard mod_rewrite.c mod_rewrite.h
  Log:
        Add some capability for setting the Vary response field when
        mod_rewrite makes changes based upon request fields.  This is
        by no means a complete treatment of the problem (redirects don't
        inherit the Vary at the moment, for instance), but at least
        we're not ignoring Vary here completely any more.
  
  PR:           1644
  Reviewed by:  Ralf Engelschall
  
  Revision  Changes    Path
  1.126     +20 -0     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.125
  retrieving revision 1.126
  diff -u -r1.125 -r1.126
  --- mod_rewrite.c     1998/07/18 15:30:46     1.125
  +++ mod_rewrite.c     1998/07/23 11:34:00     1.126
  @@ -1728,6 +1728,7 @@
   {
       char *uri;
       char *output;
  +    const char *vary;
       char newuri[MAX_STRING_LEN];
       char env[MAX_STRING_LEN];
       regex_t *regexp;
  @@ -1841,6 +1842,7 @@
                   /*  One condition is false, but another can be
                    *  still true, so we have to continue...
                    */
  +             ap_table_unset(r->notes, VARY_KEY_THIS);
                   continue;
               }
               else {
  @@ -1866,13 +1868,30 @@
                   break;
               }
           }
  +     vary = ap_table_get(r->notes, VARY_KEY_THIS);
  +     if (vary != NULL) {
  +         ap_table_merge(r->notes, VARY_KEY, vary);
  +         ap_table_unset(r->notes, VARY_KEY_THIS);
  +     }
       }
       /*  if any condition fails the complete rule fails  */
       if (failed) {
  +        ap_table_unset(r->notes, VARY_KEY);
  +        ap_table_unset(r->notes, VARY_KEY_THIS);
           return 0;
       }
   
       /*
  +     * Regardless of what we do next, we've found a match.  Check to see
  +     * if any of the request header fields were involved, and add them
  +     * to the Vary field of the response.
  +     */
  +    if ((vary = ap_table_get(r->notes, VARY_KEY)) != NULL) {
  +        ap_table_merge(r->headers_out, "Vary", vary);
  +     ap_table_unset(r->notes, VARY_KEY);
  +    }
  +
  +    /*
        *  If this is a pure matching rule (`RewriteRule <pat> -')
        *  we stop processing and return immediately. The only thing
        *  we have not to forget are the environment variables
  @@ -3718,6 +3737,7 @@
               continue;
           }
           if (strcasecmp(hdrs[i].key, name) == 0) {
  +         ap_table_merge(r->notes, VARY_KEY_THIS, name);
               return hdrs[i].val;
           }
       }
  
  
  
  1.56      +7 -0      apache-1.3/src/modules/standard/mod_rewrite.h
  
  Index: mod_rewrite.h
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_rewrite.h,v
  retrieving revision 1.55
  retrieving revision 1.56
  diff -u -r1.55 -r1.56
  --- mod_rewrite.h     1998/07/13 11:32:46     1.55
  +++ mod_rewrite.h     1998/07/23 11:34:01     1.56
  @@ -113,6 +113,13 @@
   #include "http_log.h"
   #include "http_vhost.h"
   
  +    /*
  +     * The key in the r->notes table wherein we store our accumulated
  +     * Vary values, and the one used for per-condition checks in a chain.
  +     */
  +#define VARY_KEY "rewrite-Vary"
  +#define VARY_KEY_THIS "rewrite-Vary-this"
  +
       /* The NDBM support:
        * We support only NDBM files.
        * But we have to stat the file for the mtime,
  
  
  

Reply via email to