Index: src/wp-login.php
===================================================================
--- src/wp-login.php	(revision 35853)
+++ src/wp-login.php	(working copy)
@@ -814,6 +814,24 @@
 <?php		exit;
 		}
 
+		$prevent_safe_redirect = false;
+
+		if ( is_subdomain_install() && false == is_user_member_of_blog() ) {
+
+			// prevent wp_safe_redirect to sanitized back to the standard admin URL because of domain unmatch.
+			$prevent_safe_redirect = true;
+			$all_blogs = get_blogs_of_user( $user->data->ID );
+			if ( count( $all_blogs ) > 1 ) {
+				$primary_blog = get_user_meta( $user->data->ID, 'primary_blog', true );
+				$redirect_to  = get_admin_url( $primary_blog );
+			} elseif( count( $all_blogs ) == 1 ) {
+				$users_blog  = array_shift( $all_blogs );
+				$redirect_to = get_admin_url( $users_blog->userblog_id );
+			}
+
+		}
+
+
 		if ( ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' || $redirect_to == admin_url() ) ) {
 			// If the user doesn't belong to a blog, send them to user admin. If the user can't edit posts, send them to their profile.
 			if ( is_multisite() && !get_active_blog_for_user($user->ID) && !is_super_admin( $user->ID ) )
@@ -823,7 +841,12 @@
 			elseif ( !$user->has_cap('edit_posts') )
 				$redirect_to = $user->has_cap( 'read' ) ? admin_url( 'profile.php' ) : home_url();
 		}
-		wp_safe_redirect($redirect_to);
+
+		if ( true === $prevent_safe_redirect ) {
+			wp_redirect( $redirect_to );
+		} else {
+			wp_safe_redirect( $redirect_to );
+		}
 		exit();
 	}
 
