From e239dfad43a23f3ca350d603120205a20fb6a287 Mon Sep 17 00:00:00 2001 From: Andrew Nacin Date: Tue, 6 May 2014 05:32:36 +0000 Subject: [PATCH] Multisite: Treat 'www' as a special subdomain, reversing 3.9 regression. props jeremyfelt. fixes #27927. Built from https://develop.svn.wordpress.org/trunk@28280 git-svn-id: http://core.svn.wordpress.org/trunk@28108 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/ms-load.php | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/wp-includes/ms-load.php b/wp-includes/ms-load.php index ee99398dfd..66047bcc0d 100644 --- a/wp-includes/ms-load.php +++ b/wp-includes/ms-load.php @@ -348,13 +348,30 @@ function get_site_by_path( $domain, $path, $segments = null ) { * then cache whether we can just always ignore paths. */ + // Either www or non-www is supported, not both. If a www domain is requested, + // query for both to provide the proper redirect. + $domains = array( $domain ); + if ( 'www.' === substr( $domain, 0, 4 ) ) { + $domains[] = substr( $domain, 4 ); + $search_domains = "'" . implode( "', '", $wpdb->_escape( $domains ) ) . "'"; + } + if ( count( $paths ) > 1 ) { - $paths = "'" . implode( "', '", $wpdb->_escape( $paths ) ) . "'"; - $sql = $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s", $domain ); - $sql .= " AND path IN ($paths) ORDER BY CHAR_LENGTH(path) DESC LIMIT 1"; + $search_paths = "'" . implode( "', '", $wpdb->_escape( $paths ) ) . "'"; + } + + if ( count( $domains ) > 1 && count( $paths ) > 1 ) { + $site = $wpdb->get_row( "SELECT * FROM $wpdb->blogs WHERE domain IN ($search_domains) AND path IN ($search_paths) ORDER BY CHAR_LENGTH(domain) DESC, CHAR_LENGTH(path) DESC LIMIT 1" ); + } elseif ( count( $domains ) > 1 ) { + $sql = $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE path = %s", $paths[0] ); + $sql .= " AND domain IN ($search_domains) ORDER BY CHAR_LENGTH(domain) DESC LIMIT 1"; + $site = $wpdb->get_row( $sql ); + } elseif ( count( $paths ) > 1 ) { + $sql = $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s", $domains[0] ); + $sql .= " AND path IN ($search_paths) ORDER BY CHAR_LENGTH(path) DESC LIMIT 1"; $site = $wpdb->get_row( $sql ); } else { - $site = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s and path = %s", $domain, $paths[0] ) ); + $site = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s AND path = %s", $domains[0], $paths[0] ) ); } if ( $site ) {