X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/699231ae09f7057a4d0000cdf32e50a3df6a04ca..58f607a1de715c9bca69340a4d6fb9e1b9c2bed2:/wp-includes/canonical.php diff --git a/wp-includes/canonical.php b/wp-includes/canonical.php index 1cbf7d27..20520a41 100644 --- a/wp-includes/canonical.php +++ b/wp-includes/canonical.php @@ -156,8 +156,8 @@ function redirect_canonical($requested_url=null, $do_redirect=true) { $obj = $wp_query->get_queried_object(); - if ( $term_count <= 1 && !empty($obj->term_id) && ( $tax_url = get_term_link((int)$obj->term_id, $obj->taxonomy) ) && !is_wp_error($tax_url) ) { - + if ( $term_count <= 1 && !empty($obj->term_id) && ( $tax_url = get_term_link((int)$obj->term_id, $obj->taxonomy) ) + && !is_wp_error($tax_url) && $redirect['query'] ) { if ( is_category() ) { $redirect['query'] = remove_query_arg( array( 'category_name', 'category', 'cat'), $redirect['query']); } elseif ( is_tag() ) { @@ -343,6 +343,16 @@ function redirect_canonical($requested_url=null, $do_redirect=true) { if ( !$redirect_url || $redirect_url == $requested_url ) return false; + + // Hex encoded octets are case-insensitive. + if ( false !== strpos($requested_url, '%') ) { + if ( !function_exists('lowercase_octets') ) { + function lowercase_octets($matches) { + return strtolower( $matches[0] ); + } + } + $requested_url = preg_replace_callback('|%[a-fA-F0-9][a-fA-F0-9]|', 'lowercase_octets', $requested_url); + } // Note that you can use the "redirect_canonical" filter to cancel a canonical redirect for whatever reason by returning FALSE $redirect_url = apply_filters('redirect_canonical', $redirect_url, $requested_url);