Index: wp-includes/class-wp.php
===================================================================
--- wp-includes/class-wp.php	(revision 17926)
+++ wp-includes/class-wp.php	(working copy)
@@ -185,42 +185,46 @@
 
 			// Look for matches.
 			$request_match = $request;
-			foreach ( (array) $rewrite as $match => $query) {
-				// Don't try to match against AtomPub calls
-				if ( $req_uri == 'wp-app.php' )
-					break;
+			if ( empty( $req_uri ) ) {
+				if ( isset( $rewrite['$'] ) ) {
+					$this->matched_rule = '$';
+					$query = $rewrite['$'];
+					$matches = array('');
+				}
+			} else if ( $req_uri != 'wp-app.php' ) {
+				foreach ( (array) $rewrite as $match => $query ) {
+					// If the requesting file is the anchor of the match, prepend it to the path info.
+					if ( ! empty($req_uri) && strpos($match, $req_uri) === 0 && $req_uri != $request )
+						$request_match = $req_uri . '/' . $request;
 
-				// If the requesting file is the anchor of the match, prepend it
-				// to the path info.
-				if ( (! empty($req_uri)) && (strpos($match, $req_uri) === 0) && ($req_uri != $request) )
-					$request_match = $req_uri . '/' . $request;
+					if ( preg_match("#^$match#", $request_match, $matches) ||
+						preg_match("#^$match#", urldecode($request_match), $matches) ) {
+						// Got a match.
+						$this->matched_rule = $match;
+						break;
+					}
+				}
+			}
 
-				if ( preg_match("#^$match#", $request_match, $matches) ||
-					preg_match("#^$match#", urldecode($request_match), $matches) ) {
-					// Got a match.
-					$this->matched_rule = $match;
+			if ( isset( $this->matched_rule ) ) {
+				// Trim the query of everything up to the '?'.
+				$query = preg_replace("!^.+\?!", '', $query);
 
-					// Trim the query of everything up to the '?'.
-					$query = preg_replace("!^.+\?!", '', $query);
+				// Substitute the substring matches into the query.
+				$query = addslashes(WP_MatchesMapRegex::apply($query, $matches));
 
-					// Substitute the substring matches into the query.
-					$query = addslashes(WP_MatchesMapRegex::apply($query, $matches));
+				$this->matched_query = $query;
 
-					$this->matched_query = $query;
+				// Parse the query.
+				parse_str($query, $perma_query_vars);
 
-					// Parse the query.
-					parse_str($query, $perma_query_vars);
+				// If we're processing a 404 request, clear the error var
+				// since we found something.
+				if ( isset($_GET['error']) )
+					unset($_GET['error']);
 
-					// If we're processing a 404 request, clear the error var
-					// since we found something.
-					if ( isset($_GET['error']) )
-						unset($_GET['error']);
-
-					if ( isset($error) )
-						unset($error);
-
-					break;
-				}
+				if ( isset($error) )
+					unset($error);
 			}
 
 			// If req_uri is empty or if it is a request for ourself, unset error.
