Index: src/wp-includes/link-template.php
===================================================================
--- src/wp-includes/link-template.php	(revision 35485)
+++ src/wp-includes/link-template.php	(working copy)
@@ -2070,6 +2070,9 @@
 		$qs_regex = '|\?.*?$|';
 		preg_match( $qs_regex, $request, $qs_match );
 
+		$parts = array();
+		$parts[] = untrailingslashit( get_bloginfo( 'url' ) );
+
 		if ( !empty( $qs_match[0] ) ) {
 			$query_string = $qs_match[0];
 			$request = preg_replace( $qs_regex, '', $request );
@@ -2081,16 +2084,20 @@
 		$request = preg_replace( '|^' . preg_quote( $wp_rewrite->index, '|' ) . '|i', '', $request);
 		$request = ltrim($request, '/');
 
-		$base = trailingslashit( get_bloginfo( 'url' ) );
+		if ( $wp_rewrite->using_index_permalinks() && ( $pagenum > 1 || '' != $request ) ) {
+			$parts[] = 'index.php';
+		}
 
-		if ( $wp_rewrite->using_index_permalinks() && ( $pagenum > 1 || '' != $request ) )
-			$base .= $wp_rewrite->index . '/';
+		$parts[] = untrailingslashit( $request );
 
 		if ( $pagenum > 1 ) {
-			$request = ( ( !empty( $request ) ) ? trailingslashit( $request ) : $request ) . user_trailingslashit( $wp_rewrite->pagination_base . "/" . $pagenum, 'paged' );
+			$parts[] = $wp_rewrite->pagination_base;
+			$parts[] = $pagenum;
 		}
 
-		$result = $base . $request . $query_string;
+		$parts[] = $query_string;
+
+		$result = user_trailingslashit( implode( '/', array_filter( $parts ) ), 'paged' );
 	}
 
 	/**
