返回列表 发帖

[分享] 让IIS支持WordPress的Permalink功能(修复中文tag页翻页问题)

给IIS加上支持WordPress的Permalink功能,可以通过ISAPI的URL Rewrite过滤器,或者404重定向的方式来实现。
ISAPI过滤器需要手动设置Rewrite规则,对于普通用户来说这是很困难的,而且一些空间商也不提供此类功能。
WordPress官网给出404重定向解决方法,不过存在缺陷,不能支持带Query String的链接,例如搜索结果的翻页:
  1. http://domain/page/2?s=key
复制代码
这里介绍一种同样通过404重定向的方式,解决Query String问题的方式:
  1. <?php
  2. /* For Wordpress Permalink */
  3. // 404 parameter pattern
  4. $ori_qs = $_SERVER['QUERY_STRING'];
  5. $pattern = '/[^;]+;[^:]+:\/\/[^\/]+(\/[^\?]*)(?:\?(.*))?/i';
  6. preg_match($pattern, $ori_qs, $matches);

  7. // Request path
  8. $ori_path = $matches[1] . (strlen($matches[2]) > 0 ? '?' . $matches[2] : '');
  9. $_SERVER['PATH_INFO']    = iconv('GBK', 'UTF-8', $ori_path);        // For Chinese slug on IIS (CHS)
  10. $_SERVER['REQUEST_URI']  = $_SERVER['PATH_INFO'];

  11. // Query parameters
  12. $query_args              = explode('&', $matches[2]);
  13. unset($_GET);
  14. foreach ($query_args as $arg)
  15. {
  16.     $the_arg = explode('=', $arg);
  17.     $_GET[$the_arg[0]] = $the_arg[1];
  18. }

  19. header('HTTP/1.1 200 OK');
  20. include('index.php');
  21. ?>
复制代码
将上述代码保存为:wp-404-handler.php文件,上传至WordPress根目录,然后指定404模式为“url”,地址为"/wp-404-handler.php"。
如果你的WordPress不是安装在根目录,例如:"http://domain/blog",那么请将上述地址修改为“/blog/wp-404-handler.php”。

===============以下在IIS上支持中文slug方式作废,请参考上面关于中文slug的处理===============

另外,中文slug在IIS上失效的方式需要通过修改"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 = iconv('GBK', 'UTF-8', $_SERVER['PATH_INFO']);
else
        $pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = iconv('GBK', 'UTF-8', $_SERVER['REQUEST_URI']);


经过这两步修改以后,IIS也能完美支持WordPress的Permalink功能了。

[ 本帖最后由 JAY 于 2008-11-8 13:33 编辑 ]
WFans版主友情提示:
如果你的WordPress出现了问题,提问前必看:
1. 请对你的问题描述清楚,不用太深入,你自己能看明白就好
2. 请给出出错的地址,这样我们才好帮你分析诊断
3. 如果问题解决了请修改求助贴标题,在后面加上【已修复】字样,好方便别的朋友查看
4. 最后如果你看厌了满是字的BLOG,欢迎访问Geki Moe!!! ACG Share

收藏以备后用,咔咔,还是有不少人用WIN主机架设WP的。
Tech Blog: GENMICHA | 趣站酷软
Life Blog: Yep Life @CN
WordPress Lab: iWP.me

TOP

请问和我:http://www.chrisoft.cn/2008/07/2 ... -pseudo-static.html
这个的区别在哪里呢?.
谢谢.

TOP

回复 板凳 sinpo 的帖子

你那个即为WordPress官方提供的方法,你可以试试看你在搜索结果页面翻页是会出问题的。


[ 本帖最后由 JAY 于 2008-9-15 10:00 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
WFans版主友情提示:
如果你的WordPress出现了问题,提问前必看:
1. 请对你的问题描述清楚,不用太深入,你自己能看明白就好
2. 请给出出错的地址,这样我们才好帮你分析诊断
3. 如果问题解决了请修改求助贴标题,在后面加上【已修复】字样,好方便别的朋友查看
4. 最后如果你看厌了满是字的BLOG,欢迎访问Geki Moe!!! ACG Share

TOP

回复 地板 JAY 的帖子

那你的不加上"# header("HTTP/1.1 200 OK");"
会不会使得搜索引擎不收录呢?

TOP

回复 5楼 sinpo 的帖子

不会啊,我的收录好好的呢………
还有你的问题你看看我上面的图吧。
WFans版主友情提示:
如果你的WordPress出现了问题,提问前必看:
1. 请对你的问题描述清楚,不用太深入,你自己能看明白就好
2. 请给出出错的地址,这样我们才好帮你分析诊断
3. 如果问题解决了请修改求助贴标题,在后面加上【已修复】字样,好方便别的朋友查看
4. 最后如果你看厌了满是字的BLOG,欢迎访问Geki Moe!!! ACG Share

TOP

原帖由 JAY 于 2008-9-15 10:01 发表
不会啊,我的收录好好的呢………
还有你的问题你看看我上面的图吧。

是的.我已经测试了.并且通过你的方法修改了.
你的主机也是IIS? 不支持re_write 吗?.. 这点我就觉得有点奇怪了..
最后的是我刚刚开始没有给搜索引擎一个成功的信息几天都没收录我.
然后根据"零号相册"博主提示下我修改了. 发日志测试后. 5分钟内GOOGLE收录我了.
所以我也是在你的基础上加上了成功信息

[ 本帖最后由 sinpo 于 2008-9-15 11:08 编辑 ]

TOP

让Google搜录最快的方式是提交sitemap……
WFans版主友情提示:
如果你的WordPress出现了问题,提问前必看:
1. 请对你的问题描述清楚,不用太深入,你自己能看明白就好
2. 请给出出错的地址,这样我们才好帮你分析诊断
3. 如果问题解决了请修改求助贴标题,在后面加上【已修复】字样,好方便别的朋友查看
4. 最后如果你看厌了满是字的BLOG,欢迎访问Geki Moe!!! ACG Share

TOP

还有.
classes.php 内容替换成
  1. if ( isset($_SERVER['PATH_INFO']) )
  2.   $pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");
  3. else
  4.   $pathinfo = '';
  5. $pathinfo_array = explode('?', $pathinfo);
  6. $pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
  7. $req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");
复制代码

这样的和你有什么区别呢?也是可以实现的呀.

TOP

回复 9楼 sinpo 的帖子

这个是让IIS支持非ANSI URL的,比如 中文 日文 火星文等……
这样你的slug怎么写都没关系。

[ 本帖最后由 JAY 于 2008-9-15 11:37 编辑 ]
WFans版主友情提示:
如果你的WordPress出现了问题,提问前必看:
1. 请对你的问题描述清楚,不用太深入,你自己能看明白就好
2. 请给出出错的地址,这样我们才好帮你分析诊断
3. 如果问题解决了请修改求助贴标题,在后面加上【已修复】字样,好方便别的朋友查看
4. 最后如果你看厌了满是字的BLOG,欢迎访问Geki Moe!!! ACG Share

TOP

返回列表