diff --git a/var/Typecho/Request.php b/var/Typecho/Request.php index f77b4fcb..e11e8d48 100644 --- a/var/Typecho/Request.php +++ b/var/Typecho/Request.php @@ -39,6 +39,14 @@ class Typecho_Request */ private $_server = array(); + /** + * _requestUri + * + * @var string + * @access private + */ + private $_requestUri = NULL; + /** * 客户端ip地址 * @@ -306,7 +314,52 @@ class Typecho_Request public function getRequestUrl() { $scheme = $this->isSecure() ? 'https' : 'http'; - return $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + return $scheme . '://' . $_SERVER['HTTP_HOST'] . $this->getRequestUri(); + } + + /** + * 获取请求地址 + * + * @access public + * @return string + */ + public function getRequestUri() + { + if (!empty($this->_requestUri)) { + return $this->_requestUri; + } + + //处理requestUri + $requestUri = '/'; + + if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { // check this first so IIS will catch + $requestUri = $_SERVER['HTTP_X_REWRITE_URL']; + } elseif ( + // IIS7 with URL Rewrite: make sure we get the unencoded url (double slash problem) + isset($_SERVER['IIS_WasUrlRewritten']) + && $_SERVER['IIS_WasUrlRewritten'] == '1' + && isset($_SERVER['UNENCODED_URL']) + && $_SERVER['UNENCODED_URL'] != '' + ) { + $requestUri = $_SERVER['UNENCODED_URL']; + } elseif (isset($_SERVER['REQUEST_URI'])) { + $requestUri = $_SERVER['REQUEST_URI']; + if (isset($_SERVER['HTTP_HOST']) && strstr($requestUri, $_SERVER['HTTP_HOST'])) { + $parts = @parse_url($requestUri); + + if (false !== $parts) { + $requestUri = (empty($parts['path']) ? '' : $parts['path']) + . ((empty($parts['query'])) ? '' : '?' . $parts['query']); + } + } + } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0, PHP as CGI + $requestUri = $_SERVER['ORIG_PATH_INFO']; + if (!empty($_SERVER['QUERY_STRING'])) { + $requestUri .= '?' . $_SERVER['QUERY_STRING']; + } + } + + return $this->_requestUri = $requestUri; } /** @@ -364,36 +417,7 @@ class Typecho_Request $pathInfo = NULL; //处理requestUri - $requestUri = NULL; - - if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { // check this first so IIS will catch - $requestUri = $_SERVER['HTTP_X_REWRITE_URL']; - } elseif ( - // IIS7 with URL Rewrite: make sure we get the unencoded url (double slash problem) - isset($_SERVER['IIS_WasUrlRewritten']) - && $_SERVER['IIS_WasUrlRewritten'] == '1' - && isset($_SERVER['UNENCODED_URL']) - && $_SERVER['UNENCODED_URL'] != '' - ) { - $requestUri = $_SERVER['UNENCODED_URL']; - } elseif (isset($_SERVER['REQUEST_URI'])) { - $requestUri = $_SERVER['REQUEST_URI']; - if (isset($_SERVER['HTTP_HOST']) && strstr($requestUri, $_SERVER['HTTP_HOST'])) { - $parts = @parse_url($requestUri); - - if (false !== $parts) { - $requestUri = (empty($parts['path']) ? '' : $parts['path']) - . ((empty($parts['query'])) ? '' : '?' . $parts['query']); - } - } - } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0, PHP as CGI - $requestUri = $_SERVER['ORIG_PATH_INFO']; - if (!empty($_SERVER['QUERY_STRING'])) { - $requestUri .= '?' . $_SERVER['QUERY_STRING']; - } - } else { - return $this->_pathInfo = '/'; - } + $requestUri = $this->getRequestUri(); //处理baseUrl $filename = (isset($_SERVER['SCRIPT_FILENAME'])) ? basename($_SERVER['SCRIPT_FILENAME']) : ''; diff --git a/var/Widget/Archive.php b/var/Widget/Archive.php index d558d2b0..508ecf89 100644 --- a/var/Widget/Archive.php +++ b/var/Widget/Archive.php @@ -605,13 +605,17 @@ class Widget_Archive extends Widget_Abstract_Contents return; } - $value = array( - 'page' => $this->_currentPage - ); - $value = array_merge($this->_archiveSingle ? $this->row : $this->_pageRow, $value); + if ($this->_archiveSingle) { + $permalink = $this->permalink; + } else { + $value = array_merge($this->_pageRow, array( + 'page' => $this->_currentPage + )); + + $path = Typecho_Router::url($type, $value); + $permalink = Typecho_Common::url($path, $this->options->index); + } - $path = Typecho_Router::url($type, $value); - $permalink = Typecho_Common::url($path, $this->options->index); $requestUrl = $this->request->getRequestUrl(); $src = parse_url($permalink); @@ -792,12 +796,6 @@ class Widget_Archive extends Widget_Abstract_Contents } } - /** 设置关键词 */ - $this->_keywords = implode(',', Typecho_Common::arrayFlatten($this->tags, 'name')); - - /** 设置描述 */ - $this->_description = $this->description; - /** 设置模板 */ if ($this->template) { /** 应用自定义模板 */ @@ -819,6 +817,12 @@ class Widget_Archive extends Widget_Abstract_Contents /** 设置标题 */ $this->_archiveTitle = $this->title; + + /** 设置关键词 */ + $this->_keywords = implode(',', Typecho_Common::arrayFlatten($this->tags, 'name')); + + /** 设置描述 */ + $this->_description = $this->description; } /** 设置归档类型 */ @@ -875,7 +879,9 @@ class Widget_Archive extends Widget_Abstract_Contents ->where('table.contents.type = ?', 'post'); /** 设置分页 */ - $this->_pageRow = $category; + $this->_pageRow = array_merge($category, array( + 'slug' => urlencode($category['slug']) + )); /** 设置关键词 */ $this->_keywords = $category['name']; @@ -941,7 +947,9 @@ class Widget_Archive extends Widget_Abstract_Contents ->where('table.contents.type = ?', 'post'); /** 设置分页 */ - $this->_pageRow = $tag; + $this->_pageRow = array_merge($tag, array( + 'slug' => urlencode($tag['slug']) + )); /** 设置关键词 */ $this->_keywords = $tag['name']; @@ -1556,6 +1564,8 @@ class Widget_Archive extends Widget_Abstract_Contents $allows = array_merge($allows, $rules); } + $allows = $this->pluginHandle()->headerOptions($allows, $this); + $header = ''; if (!empty($allows['description'])) { $header .= '' . "\n"; @@ -1679,7 +1689,7 @@ var TypechoComment = { } /** 插件支持 */ - $header = $this->pluginHandle()->header($header, $this); + $this->pluginHandle()->header($header, $this); /** 输出header */ echo $header;