diff --git bp-core/bp-core-catchuri.php bp-core/bp-core-catchuri.php
index ed159be..c87dfd1 100644
--- bp-core/bp-core-catchuri.php
+++ bp-core/bp-core-catchuri.php
@@ -621,6 +621,25 @@ function bp_get_canonical_url( $args = array() ) {
 	$r = wp_parse_args( $args, $defaults );
 	extract( $r );
 
+	// Special case: when a BuddyPress directory is set to be the front
+	// page, ensure that requests for that directory at the normal URL
+	// are redirected to the home page.
+	if ( 'page' == get_option( 'show_on_front' ) && $page_on_front = (int) get_option( 'page_on_front' ) ) {
+		$front_page_component = array_search( $page_on_front, bp_core_get_directory_page_ids() );
+
+		// If requesting the front page component directory, send to
+		// the front page instead
+		if ( false !== $front_page_component && is_page( $page_on_front ) ) {
+			$bp->canonical_stack['canonical_url'] = trailingslashit( bp_get_root_domain() );
+
+		// Unless the front page is set to the registration page and
+		// the current user is logged in, in which case we send to the
+		// members directory to avoid redirect loops
+		} else if ( bp_is_register_page() && 'register' == $front_page_component && is_user_logged_in() ) {
+			$bp->canonical_stack['canonical_url'] = apply_filters( 'bp_loggedin_register_page_redirect_to', trailingslashit( bp_get_root_domain() . '/' . bp_get_members_root_slug() ) );
+		}
+	}
+
 	if ( empty( $bp->canonical_stack['canonical_url'] ) ) {
 		// Build the URL in the address bar
 		$requested_url  = bp_get_requested_url();
