Index: mod_rewrite.c
===================================================================
--- mod_rewrite.c	(revision 894164)
+++ mod_rewrite.c	(working copy)
@@ -153,6 +153,7 @@
 #define RULEFLAG_STATUS             1<<13
 #define RULEFLAG_ESCAPEBACKREF      1<<14
 #define RULEFLAG_DISCARDPATHINFO    1<<15
+#define RULEFLAG_QSDISCARD          1<<16
 
 /* return code of the rewrite rule
  * the result may be escaped - or not
@@ -754,7 +755,7 @@
  * split out a QUERY_STRING part from
  * the current URI string
  */
-static void splitout_queryargs(request_rec *r, int qsappend)
+static void splitout_queryargs(request_rec *r, int qsappend, int qsdiscard)
 {
     char *q;
 
@@ -770,6 +771,11 @@
         return;
     }
 
+    if ( qsdiscard ) {
+        r->args = NULL; /* Discard query string */
+        rewritelog((r, 2, NULL, "discarding query string"));
+    }
+
     q = ap_strchr(r->filename, '?');
     if (q != NULL) {
         char *olduri;
@@ -3493,6 +3499,9 @@
         if (   !strcasecmp(key, "SA")
             || !strcasecmp(key, "sappend")) {              /* qsappend */
             cfg->flags |= RULEFLAG_QSAPPEND;
+        } else if ( !strcasecmp(key, "SD")
+                || !strcasecmp(key, "sdiscard") ) {       /* qsdiscard */
+            cfg->flags |= RULEFLAG_QSDISCARD;
         }
         else {
             ++error;
@@ -3998,7 +4007,7 @@
         r->path_info = NULL; 
     }
 
-    splitout_queryargs(r, p->flags & RULEFLAG_QSAPPEND);
+    splitout_queryargs(r, p->flags & RULEFLAG_QSAPPEND, p->flags & RULEFLAG_QSDISCARD);
 
     /* Add the previously stripped per-directory location prefix, unless
      * (1) it's an absolute URL path and
