diff options
-rw-r--r-- | includes/bootstrap.inc | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc index cb4ec13b5..04befd32a 100644 --- a/includes/bootstrap.inc +++ b/includes/bootstrap.inc @@ -515,20 +515,30 @@ function check_plain($text) { } /** - * Since $_SERVER['REQUEST_URI'] is only available on Apache, we - * generate an equivalent using other environment variables. + * The value of $_SERVER['REQUEST_URI'] is inconsistent between various + * web servers (Apache, IIS, iPlanet, etc.). + * + * For those cases where REQUEST_URI is provided, we inspect it to be sure + * that it contains the QUERY_STRING as well as the actual REQUEST_URI. + * + * Where this value is not available we generate an equivalent using other + * environment variables. */ function request_uri() { - - if (isset($_SERVER['REQUEST_URI'])) { - $uri = $_SERVER['REQUEST_URI']; - } - else { - if (isset($_SERVER['argv'])) { - $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0]; + static $uri; + if (!isset($uri)) { + // If we have a REQUEST_URI and the query string is present in it, we use the value directly. + if (isset($_SERVER['REQUEST_URI']) && !empty($_SERVER['QUERY_STRING']) && strpos($_SERVER['REQUEST_URI'], $_SERVER['QUERY_STRING'])) { + $uri = $_SERVER['REQUEST_URI']; } else { - $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING']; + // Generate an equivalent. + if (isset($_SERVER['argv'])) { + $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0]; + } + else { + $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING']; + } } } |