/** * 确定请求的完整 URL * * 几个示例: * * <ul> * <li>请求 http://www.example.com/index.php?controller=posts&action=create</li> * <li>返回 /index.php?controller=posts&action=create</li> * </ul> * <ul> * <li>请求 http://www.example.com/news/index.php?controller=posts&action=create</li> * <li>返回 /news/index.php?controller=posts&action=create</li> * </ul> * <ul> * <li>请求 http://www.example.com/index.php/posts/create</li> * <li>返回 /index.php/posts/create</li> * </ul> * <ul> * <li>请求 http://www.example.com/news/show/id/1</li> * <li>返回 /news/show/id/1</li> * </ul> * * 此方法参考 Zend Framework 实现。 * * @return string 请求的完整 URL */ function requestUri() { if (self::$_request_uri) { return self::$_request_uri; } if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { $uri = $_SERVER['HTTP_X_REWRITE_URL']; } elseif (isset($_SERVER['REQUEST_URI'])) { $uri = $_SERVER['REQUEST_URI']; } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { $uri = $_SERVER['ORIG_PATH_INFO']; if (!empty($_SERVER['QUERY_STRING'])) { $uri .= '?' . $_SERVER['QUERY_STRING']; } } else { $uri = ''; } self::$_request_uri = $uri; return $uri; }
/** * 确定 REQUEST_URI * * @return string */ function getRequestUri() { if (self::$_request_uri) { return self::$_request_uri; } if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { // check this first so IIS will catch $uri = $_SERVER['HTTP_X_REWRITE_URL']; } elseif (isset($_SERVER['REQUEST_URI'])) { $uri = $_SERVER['REQUEST_URI']; } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0, PHP as CGI $uri = $_SERVER['ORIG_PATH_INFO']; if (!empty($_SERVER['QUERY_STRING'])) { $uri .= '?' . $_SERVER['QUERY_STRING']; } } else { $uri = ''; } self::$_request_uri = $uri; return $uri; }