zoukankan      html  css  js  c++  java
  • IIS下配置WordPress永久链接支持中文完美方法

    发现所有的中文Tag页面均是跳转到对应主题的404页面而英文是很正常的,Google了之后,终于找到一个解决的办法,贴出来分享、记载。


    打开wp-includes/classes.php文件,找到如下代码:

    1. if ( isset($_SERVER['PATH_INFO']) )  
    2.    $pathinfo = $_SERVER['PATH_INFO']; 
    3. else  $pathinfo = ''
    4. $pathinfo_array = explode('?', $pathinfo); 
    5.  $pathinfo = str_replace("%", "%25", $pathinfo_array[0]); 
    6.  $req_uri = $_SERVER['REQUEST_URI'];  


    修改成:

    1.  if ( isset($_SERVER['PATH_INFO']) ) 
    2.   $pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");  
    3. else  $pathinfo = ''
    4.   $pathinfo_array = explode('?', $pathinfo); 
    5.   $pathinfo = str_replace("%", "%25", $pathinfo_array[0]); 
    6.   $req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK"); 
    7.  

    在iis6.0下测试通过

    通过这两步修改,IIS下的WordPress效果已经相当很好了。


    当然还有用如下方法的修改为:

    1. if ( isset($_SERVER['PATH_INFO']) ) 
    2.         $pathinfo = iconv('GBK', 'UTF-8', $_SERVER['PATH_INFO']); 
    3. else 
    4.         $pathinfo = ''
    5. $pathinfo_array = explode('?', $pathinfo); 
    6. $pathinfo = str_replace("%", "%25", $pathinfo_array[0]); 
    7. $req_uri = iconv('GBK', 'UTF-8', $_SERVER['REQUEST_URI']); 
    8.  

    分析问题是网上说是IIS这样的错误导致在WordPress中,对$_SERVER['PATH_INFO']和$_SERVER['REQUEST_URI']取值时就会取到GBK编码的url,但是WordPresss是用UTF-8编码的,所以中文就转成了乱码,再转换成SQL去数据库查询的时候就怎么也找不到记录了。

    有时间再查一查看看是否修改一些开关可否避免这种愚蠢的瞎转换.....

    下面是另外一种方法,可惜我没有试成功Windows主机WordPress中文链接404错误解决方案
    由 iGuang 撰写 http://iguang.info/2010/05/19/wordpress-chinese-url-404-solution/
    用 WordPress 写中文博客时 URL 中经常会包含中文字符,一般出现在 Tag 和分类的 URL 中。而 IIS7 对包含中文的 URL 支持有问题。这样的情况下访问如「http://opnir.com/tag/软件」这样的 URL 就会发生 404 错误。
    像 Godaddy 的 Windows 主机正是使用 IIS7 作为 Web 服务器的,在此空间上使用 WordPress 就会出现以上问题,虽然可以通过修改程序文件或者修改 Tag 和分类的别名为英文的方法来解决,但非常不实用。
    测试环境:Godaddy Windows主机, IIS7.0,WordPress2.9.2简体中文版,http://iguang.info
    方案一:来自铭的Blog,试用有效。
    下面介绍一种解决方法,只需要增加一个 PHP 文件,并修改一下 web.config 文件中的 Rewrite 规则即可,不需要修改程序文件。
    新建一个“chineseurl.php”文件,内容如下:

    1. <?php 
    2.  
    3. // IIS Mod-Rewrite  
    4. if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) { 
    5. $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_ORIGINAL_URL']; 
    6. // IIS Isapi_Rewrite  
    7. else if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { 
    8. $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL']; 
    9. else 
    10. // Use ORIG_PATH_INFO if there is no PATH_INFO  
    11. if ( !isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO']) ) 
    12. $_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO']; 
    13.  
    14. // Some IIS + PHP configurations puts the script-name in the path-info (No need to append it twice)  
    15. if ( isset($_SERVER['PATH_INFO']) ) { 
    16. if ( $_SERVER['PATH_INFO'] == $_SERVER['SCRIPT_NAME'] ) 
    17. $_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO']; 
    18. else 
    19. $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] . $_SERVER['PATH_INFO']; 
    20.  
    21. // Append the query string if it exists and isn't null  
    22. if (isset($_SERVER['QUERY_STRING']) && !emptyempty($_SERVER['QUERY_STRING'])) { 
    23. $_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; 
    24.  
    25. require("index.php"); 
    26.  
    27. ?>

    修改 web.config 文件内容如下:

    1. <configuration> 
    2.   <system.webServer> 
    3.     <rewrite> 
    4.       <rules> 
    5.        <rule name="ChineseURL" stopProcessing="true"> 
    6.           <match url="^(tag|category)/(.*)$" /> 
    7.           <action type="Rewrite" url="chineseurl.php"/> 
    8.         </rule> 
    9.         <rule name="wordpress" patternSyntax="Wildcard"> 
    10.           <match url="*" /> 
    11.             <conditions> 
    12.               <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    13.               <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    14.             </conditions> 
    15.           <action type="Rewrite" url="index.php" /> 
    16.         </rule> 
    17.       </rules> 
    18.     </rewrite> 
    19.   </system.webServer> 
    20. </configuration> 

    以上两个文件都存放在 WordPress 的安装目录。
    如果 WordPress 不是装在根目录,则需要更改“<match url=”^(tag|category)/(.*)$” />”为“<match url=”^安装目录/(tag|category)/(.*)$” />”。

    如果在固定链接设置里把默认的标签前缀和分类目录前缀(tag 和 category)改了,则更改这句里的对应内容即可。
    此文适用于 WordPress 2.9,2.9以下版本应该也可以适用,但笔者没有测试过。
    此文适用于 Godaddy 的 Windows 主机。

  • 相关阅读:
    开源.NET FTP组件edtFTPnet 用法
    C#开发的较好的FTP类
    C# 配置文件读取与修改
    对于List的All,Any,Where,FirstOrDefault,Average,Sum,Distinct,Union,AddRange,RemoveRange,InsertRange,GetRange操作
    一次性打印多个C1FlexGrid
    Word自动生成目录页码靠右对齐
    Windows Workflow学习文档
    Windows Workflow开发演练
    Boo who
    Missing letters
  • 原文地址:https://www.cnblogs.com/icestone10/p/3250578.html
Copyright © 2011-2022 走看看