中文标签Wordpress无法正常连接 - 完美解决方案

WordPress中文标签链接打不开(显示错误 404 -

文件未找到)的解决方法

例如点击中文标签出现提示找不到文章的页面,上网上搜了一下解决办法大概有几种,本人推荐第一种。

修改wp-includes/rewrite.php

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

function get_tag_permastruct() {

if (isset($this->tag_structure)) {

return $this->tag_structure;

}

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

line need change------

$this->tag_structure = '';

return false;

}

把第5行改为

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

{

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

原理是,IIS会将PathInfo中的UTF-8转换成GBK,而QueryString中就不会转换,故而为了使用Permalink,采用以下方法:

打开wp-includes/classes.php文件,

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.example.com/?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了)。

结论:

Windows+IIS主机下,通过方案一可以完美解决中文tag问题

Linux+Apache主机下,不能使用中文Permalink,除非修改Apache,否则只有用方案一和方案三绕行。

方案一是较为推荐的方法,但是搭配WP-SuperCache使用的时候,需要自己在.htaccess文件中加入一条不处理tag链接的规则。

rewrite.php wordpress 缓存 固定连接,【转】Wordpress中文标签无法正常连接 - 完美解决方案...相关推荐

  1. 【转】最佳 WordPress 缓存插件:WP Super Cache

    WP Super Cache 是 WordPress 官方开发人员 Donncha 开发,是当前最高效也是最灵活的 WordPress 静态缓存插件.它把整个网页直接生成 HTML 文件,这样 Apa ...

  2. php 文章浏览量 缓存,WordPress缓存文章浏览量访问不自动增加怎么办?WordPress缓存导致文章阅读数点赞数不更新...

    Wordpress 静态缓存目前对于何先生来说作用不是很大,比较适合一些流量比较大的博客或者网站. 之前接触过 Wordpress 静态缓存,遇到过这个问题后面没有去深究. WordPress缓存文章 ...

  3. WordPress缓存插件Cache Enabler使用教程

    Cache Enabler是适用于WordPress的轻量级缓存插件,它通过生成静态HTML文件来使您的网站更快,并且它是最早使用WebP支持的缓存插件之一.它是由KeyCDN背后的公司创建的,该内容 ...

  4. 支持中文的WordPress缓存加速优化插件WP Fastest Cache

    ​​我们使用 WordPress 建立的站点,每一个页面几乎都要用到 PHP 和 MySQL,所以为了加速站点的访问速度,十分有必要将这些页面生成一个静态的 html 文件并保存以便其他用户访问静态 ...

  5. wordpress url index.php,WordPress对URL的路由解析过程详解

    本文说明WP 对URL rewrite并生成当前请求的过程. 实际内容并不复杂, 说的比较啰嗦啦- 关于Query Vars 这是Wordpress全部代码中最重要的变量,所谓的query vars是 ...

  6. wordpress 多语言插件-wordpress 不同双语言三语言插件

    wordpress 多语言插件,wordpress双语插件对于wordpress多语言网站通常有两种形式,第一种是独立的网络语言,另一种是多种语言但是独立的网站.WordPress多语言插件 自动化的 ...

  7. wordpress 数据库_在WordPress中使用数据库

    wordpress 数据库 Out of the box, WordPress provides tons of functions that can be used to interact with ...

  8. WordPress初学者入门教程-WordPress的设置

    本文源自:https://wpeyes.com/wordpress 在侧边栏中,你会看到一个项目 标签设置. 在设置中,有许多项. 重要提示:主题和插件可以向侧边栏菜单系统添加项目.如果你的菜单中有没 ...

  9. wordpress安装插件提示“wordpress发生意外错误,可能WordPress.org或服务器配置文件存在问题”...

    安装wordpress插件,提示报错"wordpress发生意外错误,可能WordPress.org或服务器配置文件存在问题" 出问题的页面是http://*.*.*.*/wp-a ...

最新文章

  1. 商品规格可选怎么设计_商品模块数据库表解析(一)
  2. for遍历和foreach遍历的一个细小差别
  3. 消息队列 Kafka 的基本知识及 .NET Core 客户端
  4. 你还不会手写SpringBoot启动器吗
  5. mysql-plus多数据库_Springboot+mybatisplus+mysql配置多数据源(注解版)
  6. mysql存储引擎的区别_Mysql的两种存储引擎以及区别
  7. php mysql 地理位置_MySQL版中国省市区地址地区信息数据表
  8. php 页面拖动改变大小,鼠标拖动改变DIV等网页元素的大小的实现方法
  9. Python 标准库 —— string
  10. 开放API 与 查询语言GraphQL
  11. 9判断整数序列是不是二元查找树的后序遍历结果
  12. ModuleNotFoundError: No module named 'tornado'解决办法
  13. 三菱Q系列总线型项目程序全套,三菱PLC程序
  14. 以下不正确的C语言标识符是( ),以下不正确的C语言标识符是 _____。
  15. ubuntu14.04 clementine音乐播放器无法播放ape格式解决方法
  16. 2017 华为软件精英挑战赛
  17. 阿里云国际版跨境加速,全球加速和Squid 缓存代理解决方案
  18. vue手机适配媒体查询用法@media
  19. ·穷途末路之举·解决VirtualBox启动问题-Error relaunching VirtualBox VM process 5/terminated with exit code1(0x1)
  20. SP11 FCTRL - Factorial

热门文章

  1. HDU_2795 Billboard(线段树)
  2. 企业中两个重要而又容易被忽视的角色,互联网营销
  3. 实验三 静态路由、默认路由配置
  4. Linux C++、Boost、ACE ......
  5. VS2015 打包winform 安装程序
  6. SQL 列转行,即多行合并成一条
  7. 织梦本地调试运行PHP不显示图片,织梦dedecms不能下载远程图片实现图片本地化解决方法...
  8. LightGBM参数的贝叶斯搜索(有boost_from_average参数设置)
  9. PHP各种实用的开源库推荐
  10. php异步检测用户名是否已经存在,AJAX实例-检测用户名是否存在