rewrite.php wordpress 缓存 固定连接,【转】Wordpress中文标签无法正常连接 - 完美解决方案...
中文標簽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中文标签无法正常连接 - 完美解决方案...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php画图取色,procreate怎么取
- 下一篇: php preg match x,PHP