Index: includes/bootstrap.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/bootstrap.inc,v retrieving revision 1.134 diff -u -r1.134 bootstrap.inc --- includes/bootstrap.inc 6 Dec 2006 16:14:11 -0000 1.134 +++ includes/bootstrap.inc 8 Dec 2006 08:58:58 -0000 @@ -515,20 +515,30 @@ } /** - * 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']; + } } }