--- mod_rewrite.c	2002-10-04 10:57:38.000000000 -0300
+++ mod_rewrite-44.c	2003-01-31 16:47:50.000000000 -0200
@@ -1069,6 +1069,7 @@
 static int hook_uri2file(request_rec *r)
 {
     rewrite_server_conf *conf;
+    const char *saved_rulestatus;
     const char *var;
     const char *thisserver;
     char *thisport;
@@ -1149,6 +1150,8 @@
                      thisurl, NULL);
     apr_table_setn(r->subprocess_env, ENVVAR_SCRIPT_URI, var);
 
+    if (!(saved_rulestatus = apr_table_get(r->notes,"already_rewritten")))
+    {
     /* if filename was not initially set,
      * we start with the requested URI
      */
@@ -1157,11 +1160,24 @@
         rewritelog(r, 2, "init rewrite engine with requested uri %s",
                    r->filename);
     }
-
+        else 
+        {
+            rewritelog(r, 2, "init rewrite engine with passed filename %s. Original uri = %s",
+                r->filename,r->uri);
+        }
     /*
      *  now apply the rules ...
      */
     rulestatus = apply_rewrite_list(r, conf->rewriterules, NULL);
+        apr_table_set(r->notes,"already_rewritten", apr_psprintf(r->pool,"%d",rulestatus));
+    }
+    else
+    {
+        rewritelog(r, 2, "uri already rewritten. Status %s, Uri %s, r->filename %s",saved_rulestatus,
+            r->uri,r->filename);
+        rulestatus = atoi(saved_rulestatus);
+    }
+
     if (rulestatus) {
 
         if (strlen(r->filename) > 6 &&
@@ -2082,6 +2098,7 @@
             rewritelog(r, 2, "[per-dir %s] forcing proxy-throughput with %s",
                        perdir, r->filename);
         }
+        if (strncasecmp("proxy:",r->filename,6))
         r->filename = apr_pstrcat(r->pool, "proxy:", r->filename, NULL);
         return 1;
     }
@@ -2679,6 +2696,7 @@
         || (i > 6 && strncasecmp(uri, "ftp://",    6) == 0)
         || (i > 5 && strncasecmp(uri, "ldap:",     5) == 0)
         || (i > 5 && strncasecmp(uri, "news:",     5) == 0)
+        || (i > 6 && strncasecmp(uri, "proxy:",    6) == 0)
         || (i > 7 && strncasecmp(uri, "mailto:",   7) == 0) ) {
         return 1;
     }
