奇妙数据

解决iis7环境下typecho设置伪静态后无法搜索中文关键字以及无法点击中文标签问题
解决iis7环境下typecho设置伪静态后无法搜索中文关键字以及无法点击中文标签问题typecho程序设置伪静态...
扫描右侧二维码阅读全文
20
2018/09

解决iis7环境下typecho设置伪静态后无法搜索中文关键字以及无法点击中文标签问题

解决iis7环境下typecho设置伪静态后无法搜索中文关键字以及无法点击中文标签问题

typecho程序设置伪静态后可以去掉链接里的index.php,同时对搜索引擎收录友好,开启伪静态是很有必要的,但是测试发现,开启伪静态后悔出现中文无法识别的问题,比如搜索英文有结果,但是中文搜索不到内容,出现404界面,那么这种问题应该如何处理呢?

修改伪静态

既然问题出在设置伪静态之后,那么久要从伪静态规则着手去解决
下面是修改之后的伪静态规则,首先复制到web.config文件对应位置

        <rewrite>
        <rules>
            <rule name="cnUrl" stopProcessing="true">
                <match url="^(tag|category|search)/(.*)$" />
                <action type="Rewrite" url="cnurl.php" />
            </rule>
            <rule name="Typecho rewrite" stopProcessing="true">
                <match url="^(.*)$" ignoreCase="false" />
                <conditions logicalGrouping="MatchAll">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Rewrite" url="index.php" />
            </rule>    
        </rules>
    </rewrite>

然后在网站根目录新建cnurl.php文件,填写以下内容

    <?php
if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) {
    // IIS Mod-Rewrite
    $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_ORIGINAL_URL'];
} else if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
    // IIS Isapi_Rewrite
    $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
} else {
    // Use ORIG_PATH_INFO if there is no PATH_INFO
    (!isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO'])) && ($_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO']);
    // Some IIS + PHP configurations puts the script-name in the path-info (No need to append it twice)
    if (isset($_SERVER['PATH_INFO'])) {
        ($_SERVER['PATH_INFO'] == $_SERVER['SCRIPT_NAME']) ? ($_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO']) : ($_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] . $_SERVER['PATH_INFO']);
    }
    // Append the query string if it exists and isn't null
    (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) && ($_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']);
}
require("index.php");
?>

设置完成后试着搜索中文关键字看看效果吧!

最后修改:2018 年 09 月 20 日 08 : 47 PM
如果觉得我的文章对你有用,请随意赞赏

2 条评论

  1. 小华

    你好,博主在吗?请问复制到web.config文件对应位置,是哪个位置?能不能详细一点,谢谢。

    1. 妙数
      @小华

      放在web.config的<system.webServer>节点下,参考如下:
      <?xml version="1.0" encoding="utf-8"?>
      <configuration>
      <system.webServer>
      <rewrite>

      <rules> "伪静态规则" </rules>

      </rewrite>
      </system.webServer>
      </configuration>

发表评论