Hex octets are case-insenstive. Don't 301 when the only octet case differs. Props hakre. fixes #14292 for 3.1

git-svn-id: https://develop.svn.wordpress.org/trunk@15437 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Ryan Boren 2010-07-18 13:46:35 +00:00
parent 785c20b082
commit 02580f7b0b
1 changed files with 18 additions and 0 deletions

View File

@ -343,6 +343,24 @@ 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);
}
// Hex encoded octets are case-insensitive.
if ( false !== strpos($requested_url, '%') ) {
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);