Index: wp-includes/rewrite.php
===================================================================
--- wp-includes/rewrite.php	(revision 17507)
+++ wp-includes/rewrite.php	(working copy)
@@ -13,7 +13,7 @@
  * @since 2.1.0
  *
  * @param string $regex Regular Expression to match request against.
- * @param string $redirect Page to redirect to.
+ * @param string|array $redirect Page to redirect to.
  * @param string $after Optional, default is 'bottom'. Where to add rule, can also be 'top'.
  */
 function add_rewrite_rule($regex, $redirect, $after = 'bottom') {
@@ -1791,14 +1791,22 @@
 	 * @access public
 	 *
 	 * @param string $regex Regular expression to match against request.
-	 * @param string $redirect URL regex redirects to when regex matches request.
+	 * @param string|array $redirect URL regex redirects to when regex matches request.
 	 * @param string $after Optional, default is bottom. Location to place rule.
 	 */
 	function add_rule($regex, $redirect, $after = 'bottom') {
-		//get everything up to the first ?
-		$index = (strpos($redirect, '?') == false ? strlen($redirect) : strpos($redirect, '?'));
-		$front = substr($redirect, 0, $index);
-		if ( $front != $this->index ) { //it doesn't redirect to WP's index.php
+		if ( is_array( $redirect ) ) {
+			$external = false;
+			$redirect = add_query_arg( $redirect, 'index.php' );
+		} else {
+			// get everything up to the first '?'
+			$index = (strpos($redirect, '?') == false ? strlen($redirect) : strpos($redirect, '?'));
+			$front = substr($redirect, 0, $index);
+
+			$external = $front != $this->index;
+		}
+
+		if ( $external ) { //it doesn't redirect to WP's index.php
 			$this->add_external_rule($regex, $redirect);
 		} else {
 			if ( 'bottom' == $after)
