`
jubincn
  • 浏览: 243714 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论

wordpress 设置静态后标签中中文链接找不到页面的解决方法

 
阅读更多

转自:http://www.li.cm/news/2011/04/17/wordpress-%E8%AE%BE%E7%BD%AE%E9%9D%99%E6%80%81%E5%90%8E%E6%A0%87%E7%AD%BE%E4%B8%AD%E4%B8%AD%E6%96%87%E9%93%BE%E6%8E%A5%E6%89%BE%E4%B8%8D%E5%88%B0%E9%A1%B5%E9%9D%A2%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9.html

用win IIS主机,设置Wordpress的TAG标签,在前台点击进入的时候发现打不开跳到404错误页,编码问题。

所以需要把它转换成UTF-8和GBK的编码,下面推荐三种解决方法:
一、修改wp-includes/rewrite.php

这是网上最常见的方法,原理是,让WordPress在对其他内容使用Permalink的时候,对tag不使用,而使用链接2的QueryString模式发送中文编码:

if (empty($this->permalink_structure)) { //-----this line need change------
改为

if (!empty($this->permalink_structure)) {

二、如果你用的是windows主机,还可以这样做:

IIS会将PathInfo中的UTF-8转换成GBK,而QueryString就不会转换,故而为了使用Permalink,采用以下方法:
打开wp-includes/classes.php文件。在154到159行位置

if ( isset($_SERVER['PATH_INFO']) )
$pathinfo = $_SERVER['PATH_INFO'];
else
$pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = $_SERVER['REQUEST_URI'];

改为

if ( isset($_SERVER['PATH_INFO']) )
$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");
else
$pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");

这种发放的缺点是 :只对Windows主机、且必须是Windows下的IIS主机有效。

三、修改tag base

原理同上,只要让WordPress在打开了Permalink功能后继续对tag不理不问就行了。那么,欺骗WordPress,让它用链接2的格式来显示Permalink,可行么?可行,因为WordPress可以自定义Permalink的形式:
在WordPress的 (设置)Settings ? (固定链接)Permalinks ? (标签前缀)Tag base 中填上
/?tag=
注意””不能少,引用原文中的写法不对。另外要注意每次输入””,WP都会再次转义为””,所以每次点提交都会把””翻一倍,点两次就是”\”,所以不要多点,一次就对了。
这个方法的结果是使得链接变成这个样子
www.li.cm/?tag=/中文/
多出来的斜杠对于服务器丝毫没有影响,还是被视为QueryString,效果同上。
局限是链接变得更加不好看了,更为致命的是插件生成的Sitemap中,tag链接会变成错误的形式,如果你很在乎Sitemap,请不要使用这个方法,除非你真的无法修改自己的rewrite.php文件。

但是当你使用WP-SuperCache或者类似的缓存插件时,它会加入自己的rewrite规则,所有请求先由自己判断,不在缓存中或者不符合缓存规则才交由WordPress处理。但问题在于,它不支持中文URL的解析,哪怕是QueryString也不行。于是我们必须绕过它。
这是WP-SuperCache在.htaccess文件里所添加的rewrite规则

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{QUERY_STRING} !.*s=.*
RewriteCond %{QUERY_STRING} !.*p=.*
RewriteCond %{QUERY_STRING} !.*attachment_id=.*
RewriteCond %{QUERY_STRING} !.*wp-subscription-manager=.*
RewriteCond %{HTTP_COOKIE} !^.*(comment_author_|wordpress|wp-postpass_).*$
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz -f
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz [L]
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{QUERY_STRING} !.*s=.*
RewriteCond %{QUERY_STRING} !.*p=.*
RewriteCond %{QUERY_STRING} !.*wp-subscription-manager=.*
RewriteCond %{QUERY_STRING} !.*attachment_id=.*
RewriteCond %{HTTP_COOKIE} !^.*(comment_author_|wordpress|wp-postpass_).*$
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html -f
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html [L]

我们要做的就是不让它去判断中文tag链接,在两个 RewriteCond %{REQUEST_METHOD} !=POST 后面分别加入这样一句:
RewriteCond %{QUERY_STRING} !.*tag=.*

含义是如果QueryString中含有tag字样,请不要解析(交给下一条规则,一般来说就是WordPress的index.php了)。

PS:Windows+IIS主机下,通过方案一可以完美解决中文tag问题,Linux+Apache主机下,不能使用中文Permalink,除非修改Apache,否则只有用方案一和方案三绕行。方案一是较为推荐的方法,但是搭配WP-SuperCache使用的时候,需要自己在.htaccess文件中加入一条不处理tag链接的规则。

分享到:
评论

相关推荐

    WordPress伪静态和中文标签支持配置方法

    然而,WordPress默认不支持中文标签,这可能导致访问带有中文标签的页面时出现404错误。为解决这个问题,需要编辑WordPress核心文件`wp-includes/class-wp.php`。通过将`PATH_INFO`和`REQUEST_URI`变量的编码从GBK...

    asp静态网页生成方法

    6. **内容管理系统(CMS)支持**:许多CMS系统,如WordPress,提供了生成静态页面的插件或设置。如果你的网站基于这样的系统,可以在后台设置中启用静态化功能。 无论采用哪种方法,生成ASP静态网页都需要考虑一些...

    wordpress 中文版,很棒

    只需要下载最新中文版的WordPress压缩包,解压后上传到服务器的适当目录,然后通过Web浏览器进行在线安装。在安装过程中,用户可以选择中文语言,并设置数据库连接信息、网站标题、用户名和密码等。 WordPress的...

    WordPress中文完全教程

    【WordPress中文完全教程】 WordPress,一个全球范围内广受欢迎的开源内容管理系统(CMS),以其易用性和灵活性著称,尤其适合创建个人博客、企业网站或电子商务平台。本教程旨在为初学者提供全面的指导,帮助他们...

    22个wordpress常见问题集合

    - **详细解释**:除了文章之外,WordPress还支持创建静态页面,这些页面通常用于展示不会频繁更改的信息,如“关于我们”、“联系方式”等。与文章不同的是,页面具有更灵活的显示方式,可以根据需要放置在网站的...

    WordPress_主题模板制作及修改教程

    ### WordPress主题模板制作及修改教程 #### 一、概述 ...掌握了这些知识后,您不仅可以创建自己的WordPress主题,还能更加深入地理解Web开发中的客户端模型,为进一步学习Web技术打下坚实的基础。

    博客空间WordPress v2.21生成html版-wordpress2-cn.zip

    在标签中提到的“[博客空间]WordPress”,可能是一个专注于WordPress教学、资源分享或社区建设的平台。他们提供了这个HTML版本,旨在方便用户在不同环境下学习和使用WordPress知识,尤其是对于那些网络环境不稳定...

    wordpress中用JavaScript 输出页面代码的方法

    在WordPress中使用JavaScript输出页面代码是一种提高网站SEO效果的手段,它通过动态生成页面上的特定内容来避免搜索引擎爬虫对某些内容进行索引,从而让爬虫更多地关注网站中其他更有价值的部分。这种方法尤其适用于...

    Wordpress 爱心模板

    这包括选择合适的主机、安装WordPress程序、设置数据库连接以及选择语言等。在安装模板时,可以通过WordPress的后台界面进行上传,或者通过FTP工具将模板文件夹上传到wp-content/themes目录下,然后在WordPress后台...

    WORDPRESS IN DEPTH

    - **元标签与描述**:设置页面的标题、描述等SEO元素。 - **URL结构**:优化网站的URL结构以提高搜索引擎友好性。 - **内链策略**:通过内部链接增强网站内部页面之间的关联性。 #### 四、WordPress的高级应用 ...

    wordpress修改版模板

    这种导航栏通常位于页面顶部,可快速链接到网站的重要部分,如首页、博客、关于、联系我们等,提高用户体验。在WordPress中实现这一功能,可以通过编辑主题的header.php文件,或者使用插件如"Nav Menu Roles"来定制...

    基于PHP的WordPress图片主题AlexiaCastillov1.0源码.zip

    2. **PHP模板标签**:在WordPress主题中,PHP模板标签用于调用WordPress内置的数据,如文章内容、分类、标签等。例如,`(); ?>`用于显示文章的全文,而`(); ?>`则在页面头部插入必要的脚本和样式。 3. **函数和类**...

    基于WordPress开发的高颜值的自适应Puock主题,支持白天与黑夜模式v2.8.2

    安装请到 发行版本 中进行下载最新版本,然后到 WordPress 管理后台中的「外观」-「主题」中点击「添加」,选择 Puock 的主题包进行上传安装并启用即可。提示:为了防止主题不兼容,请在安装主题前进行数据备份,...

    淘客帝国V5.20破解版

    优化 没填搜索内容搜索,会出现找不到页面的问题优化。 优化 wordpress整合乱码问题,以及标签和类别混淆问题 优化 优化 onepage模板,图片不能直接到淘宝的问题,后台设置无效的问题 优化 能搜出来,不能跳转...

    WordPress 实现简单的企业网站

    - 可以设置特定的帖子分类显示在导航上,并链接到分类页面,便于访问者快速找到相关内容。 4. **编辑Header和Footer**: - 用户可以在`Appearance->Editor->header.php`中修改搜索框上方的链接和文本,也可以添加...

    绿色图片展示摄影工作室wordpress主题模板5215.zip

    该压缩包文件“绿色图片展示摄影工作室wordpress主题模板5215.zip”是为摄影工作室设计的一款WordPress主题模板。这个主题以绿色为主色调,旨在创建一个清新、专业的在线平台,用于展示摄影作品,吸引潜在客户,并...

Global site tag (gtag.js) - Google Analytics