前几天由于各种原因,百翔网络-张斌的博客所在服务器系统从Linux换回到了Windows 2003,博客也因此几天没能正常访问。
百翔网络-张斌的博客所使用的是Wordpress系统,在Nginx下进行伪静态是相当容易十分简单的事情,可是使用了IIS6就不是那么回事了,网上找了些IIS下Wordpress进行伪静态的方法,但大都不理想,比如利用404,利用ISAPI_ReWrite进行伪静态,总会有这样那样的问题。
无意中发现可以利用WordPress URL Rewrite完美解决遇到的问题。
Windows2003 IIS6下配置WordPress伪静态方法:
1.下载WordPress URL Rewrite组件
下载地址:http://www.binaryfortress.com/wordpress-url-rewrite
WordPress URL Rewrite主要功能与特色:完全无需人工干预,全自动重写URL,只需要在后台设置好固定链接(Permalinks)形式,就能直接使用,就像linux下用htaccess一样。可以使用在一级目录和子目录,也可以排除不需要重写的目录。这个非常方便,对于某些目录不需要URL重写的就将其排除,不会造成无法访问。因为全自动,所以免去了在写重写规则时候遇到的规则重复造成部分目录和文件无法实现的情况。
2.安装WordPress URL Rewrite
把下载的压缩包解压到任何地方,只要保证WordPressURLRewrite.ini和WordPressURLRewrite32.dll(32位版本,64位版本对应为64.dll)在同一文件夹下就可以了。
然后打开WordPressURLRewrite.ini设置你的博客目录,以及需要排除的目录,Readme.txt里有详细说明,这里就不细说了。
接下来,在IIS中选择相应的站点,在ISAPI筛选器中加载WordPressURLRewrite32.dll就可以了,加载完重启IIS或者停止网站再启动即可。
注意:要给dll所在的目录加上IIS_WPG组的写入权限,否则无法加载对应dll文件。
如果箭头红色并且向下,请尝试检查组件文件夹的权限。
到此配置已经完全OK了,因为韦文成博客的文章、栏目、tag别名均是用的英文,但是如果你的博客路径存在中文名,就得往下看了(以下方法为转载,未亲自测试)。
存在并需要解决的问题:
(1)中文的tag无法访问
解决办法:需要使用ISAPI_Rewrite来写一条规则:
RewriteRule /tag/(.*) /index\.php\?tag=$1
(2)含有中文的网址不能访问
1.安装ISAPI_Rewrite
网站根目录下新建立一个httpd.ini文件,用记事本或是EditPlus打开,规则写在httpd.ini里,如下:
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# 中文tag解决
RewriteRule /tag/(.*) /index\.php\?tag=$1
# sitemapxml
RewriteRule /sitemap.xml /sitemap.xml [L]
RewriteRule /favicon.ico /favicon.ico [L]
# For file-based wordpress content (i.e. theme), admin, etc.
RewriteRule /wp-(.*) /wp-$1 [L]
# For normal wordpress content, via index.php
RewriteRule ^/$ /index.php [L]
RewriteRule /(.*) /index.php/$1 [L]
现在中文tag是能访问了,但是还是存在问题。
存在的问题:
(1) tag页面的文章超过1页,翻页时都不能访问
解决办法:修改这条规则为:
RewriteRule /tag/[^/]+)/([^/]+)/?([0-9]+)?/ /index.php?tag=$1&paged=$3 [L]
但是修改之后中文tag又不能访问了,别担心,接着看下一步。
2.修改wp-include中的classes.php
继续修改第1步中的问题,因为修改Rewrite规则之后中文tag还是不能访问,含有中文的网址也不能访问。最好使用专门的PHP编辑器工具,如EditPlus。
原代码:
$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文件上传并覆盖原文件即可,注意文件保存格式。
注:在本文复制代码可能会出现中文标点符号,请统一改成英文符号,以免出错。