win主机解决伪静态问题
由于原主机到期了,没续费,因为手头上有个独立的服务器,把博客就搬过来了,搬家比较简单,但是调试比较麻烦,尤其是这个伪静态,最近几天都耗在这上面了,linux主机也就好办了,因为linux对php,wordpress的支持比较,现在换成win主机,就些麻烦,把原先的静态文件规则套上用,本以为这样能解决问题可是问题来了,莫名其妙地给我在网址后面加上了index.php,规则上给了去掉这样的bug,但是还是照应出现,不知道是不是win主机的通病,因为在GOOGLE、BAIDU上找解决方案,很多人出现这样的问题。
就在我四处犯愁的时候,本还在考虑是不是要更换成linux系统的,由于win主机里的数据太多,就没转,得还是解决现有的问题吧,还是得着google大神,度娘,无意中发现这样一个博客,文中说到:WordPress URL Rewrite这个组件,原先只以为别人把ISAPI_Rewrite换了个名字而已,因为确实看到了好多此类的组件,功能都大同小异。然而亲自到了作者 的网站一看才发现这是一个非常棒的Wordpress URL 重写组件。
该组件的主要功能与特色有:
- 完全无需人工干预,全自动重写URL,只需要在后台设置好Permalinks形式,就能直接使用,就像linux下用.htaccess一样哈哈,谁说我们windows主机不支持全自动伪静态的,人家照样做给你看。
- 因为全自动,所以免去了在写重写规则时候遇到的规则重复造成部分目录和文件无法实现的情况,这个问题我一直碰到,简直就要疯了。。
- 可以使用在一级目录和子目录,也可以排除不需要重写的目录。这个非常方便,对于某些目录不需要URL重写的就将其排除,不会造成无法访问。
安装方法:把压缩包解压到任何地方,只要保持WordPressURLRewrite.ini和WordPressURLRewrite32.dll(32位版本,64位版本对应为64.dll)在同一文件夹下就可以了。
然后打开WordPressURLRewrite.ini设置你的博客目录,以及需要排除的目录,这里就不详细说了,Readme.txt里有详细说明。
然后在IIS中选择相应的站点,在ISAPI筛选器中加载WordPressURLRewrite32/64.dll就可以了,加载完不用重启IIS直接生效。(注意要给dll所在的目录加上IIS_WPG组的权限)
然后在Wordpress中测试一下,应该就已经成功了~
百度网盘下载:http://pan.baidu.com/s/1zRn7d
作者发布页: http://www.binaryfortress.com/wordpress-url-rewrite
存在的问题:
(1) 对于中文的tag无法访问。
解决办法:需要使用ISAPI_Rewrite来写一条规则:
RewriteRule /tag/(.*) /index\.php\?tag=$1
(2) 含有中文的网址也是不能访问的
3 安装ISAPI_Rewrite
规则写在httpd.ini:
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule /tag/(.*)/ /index\.php\?tag=$1
现在中文tag是能访问了,但是还是存在问题。
存在的问题:
(1) tag页面的文章超过1页,第二页起都不能访问
解决办法:修改这条规则为:RewriteRule /tag/[^/]+)/([^/]+)/?([0-9]+)?/ /index.php?tag=$1&paged=$3 [L] 但是修改之后中文tag又不能访问了。
4 修改WP-include中的classes.php
继续修改第三步中的问题,因为修改Rewrite规则之后中文tag还是不能访问,含有中文的网址也是不能访问。最好使用专门的PHP编辑器工具,如EditPlus,我用的是madedit。
修改WP-include中的classes.php
原代码:
$pathinfo = $_SERVER[‘PATH_INFO’];
替换为:
$pathinfo = mb_convert_encoding($_SERVER[‘PATH_INFO’], “UTF-8”, “GBK”);
原代码:
$req_uri = $_SERVER[‘REQUEST_URI’];
替换为:
$req_uri = mb_convert_encoding($_SERVER[‘REQUEST_URI’], “UTF-8”, “GBK”);
修改后,保存下,然后将保存后的classes.php文件上传并覆盖原文件即可。
发表评论