解决wordpress ISAPI网页静态化

文章来自八喜博客,此处转载方便自己使用,在此谢谢八喜作者。

原文地址:

http://www.8xif.com/web/wordpress-isapi-solution-of-static-pages.html#post-250

这个网页静态化问题一直是wp博客的热门话题,特别是对于win主机下的博主而言尤其重要,网页静态化对于seo和迎合搜索引擎方面起着很大作用,再有一点,还有美化网址,呵呵。

下面这篇文章,是我看过的测试过的,有用才发出来,不过在实际使用中会遇到一些问题,需要说明一下。我会用红色字旁注。

首先你的服务器加载了ISAPI_Rewrite,Discuz如果您正在使用伪静态,那么就不要考虑再次加载了,在wordpress官方许多人提出了需要单独加载专用的Rewrite,其实不需要,在国内的文章copy太严重了,找了一天,发现重复的起码有9.6成都同出一辄,没有一点正确性,不能使用,无奈之下去国外搜索到后,建立了httpd.ini,网站成功完成了静态,永久链接规则也可以自行随意根据喜好设置,这是国内那些描述中还没有做到的,本站就是采用的这个规则,在永久链接内也可以随意修改自己的喜好网址样式,同样seo目的也达到了,如果您在使用wordpress的时候还在被前边描述的问题困扰,那么赶快行动吧。

备注:
1、在你使用ISAPI_Rewrite后,无需再使用cos-html-cache静态生成插件,因为没有这个必要了。
2、ISAPI_Rewrite国外网址:http://www.basilv.com/psd/blog/2006/running-wordpress-20-under-iis

———————————————————————————————————
规则如下:
[ISAPI_Rewrite]
# Defend your computer from some worm attacks
#RewriteRule .*(?:global.asa|default.ida|root.exe|..).* . [F,I,O]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP
# Rules to ensure that normal content gets through
RewriteRule /software-files/(.*) /software-files/$1 [L]
RewriteRule /images/(.*) /images/$1 [L]
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]

———————————————————————————————————

也在wordpress.org.cn找到一份可以通用的规则:

使用下面的规则,务必请浏览这篇文章,不然会出现问题:
http://www.xuedong.net/post/991.html

提供可用的Rewrite下载以及规则
永久链接设置说明:/post/%post_id%.html
下面的配置是把博客安装在/blog/中的网站使用,如果是安装在根目录下的博客,请把下面的“/blog ”删除即可。

httpd.ini配置如下:

[ISAPI_Rewrite]
RewriteRule /post/tag/(.*) /index.php?tag=$1
RewriteRule /tag/(.*) /index.php?tag=$1
RewriteRule /(about|yuming|tools|message|link|tags|sitemap) /index.php?pagename=$1
RewriteRule /post/category/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed.php?category_name=$1&feed=$2
RewriteRule /post/category/?(.*) /index.php?category_name=$1
RewriteRule /author/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed.php?author_name=$1&feed=$2
RewriteRule /author/?(.*) /index.php?author_name=$1
RewriteRule /rss.xml /wp-feed.php/?feed=rss2
RewriteRule /feed/?$ /wp-feed.php/?feed=rss2
RewriteRule /comments/feed/?$ /wp-feed.php/?feed=comments-rss2
RewriteRule /([0-9]+)/?([0-9]+)?/?$ /index.php?p=$1&page=$2
RewriteRule /post/([0-9]+)/?([0-9]+)?/?$ /index.php?p=$1&page=$2
RewriteRule /post/([0-9]+).html /index.php?p=$1 [I]
RewriteRule /page/(.*)/?s=(.*) /index.php?s=$2&paged=$1
RewriteRule /page/(.*) /index.php?paged=$1
RewriteRule /post/date/([0-9]{4})([0-9]{1,2})([0-9]{1,2})/([^/]+)/?([0-9]+)?/?$ /index.php?year=$1&monthnum=$2&day=$3&name=$4&page=$5
RewriteRule /post/date/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2&day=$3&page=$4
RewriteRule /post/date/([0-9]{4})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2&page=$3
RewriteRule /post/([0-9]+).html/(feed|rdf|rss|rss2|atom) /index.php?feed=rss2&p=$1
RewriteRule /post/([0-9]+).html/trackback /wp-trackback.php?p=$1# For file-based wordpress content (i.e. theme), admin, etc.
RewriteRule /wp-(.*) /wp-$1 [L]

———————————————————————————————————

(这里对于规则的使用方法说明一下,上面这个规则是使用在wp是安装在根目录下的,有时候网页静态实现了,但是根目录下的所有和wp博客不相关的文件夹和文件都在IE上打不开,那是因为你的规则只是对wp博客和其他几个文件有效,而其他的还没有设置好,所以你打开任何不相关的网页,都会自动转到wp博客的404页面,解决这个问题,则需要改动下,方法如下:

例如我博客根目录下有/blog/和/download/两个文件夹,有一个/logo.gif/logo文件,有几个html文件,我的设置如下:

红色是我添加的规则,是我博客所需要的,大家可以举一反三,添加自己所需要的规则就行了。

括号内是注释内容

[ISAPI_Rewrite]

# Defend your computer from some worm attacks
#RewriteRule .*(?:global.asa|default.ida|root.exe|..).* . [F,I,O]

# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP
# Rules to ensure that normal content gets through
RewriteRule /software-files/(.*) /software-files/$1 [L]
RewriteRule /images/(.*) /images/$1 [L]
RewriteRule /blog/(.*) /blog/$1 [L]
RewriteRule /download/(.*) /download/$1 [L]

(注意:要是文件夹的话,格式要这样子设置:

RewriteRule /文件夹名称/(.*) /文件夹名称/$1 [L]

RewriteRule /sitemap.xml /sitemap.xml [L]
RewriteRule /favicon.ico /favicon.ico [L]
RewriteRule /logo.gif /logo.gif [L]
RewriteRule /googleddb0700271fa6376.html /googleddb0700271fa6376.html [L]
RewriteRule /googlehostedservice.html /googlehostedservice.html [L]
RewriteRule /info.txt /info.txt [L]
RewriteRule /adsense.txt /adsense.txt [L]
RewriteRule /sitemap.xml.gz /sitemap.xml.gz [L]
RewriteRule /webmasterhome.htm /webmasterhome.htm [L]
RewriteRule /y_key_943dd5789e37ebaa.html /y_key_943dd5789e37ebaa.html [L]
RewriteRule /y_key_f8d28ec7334c81cb.html /y_key_f8d28ec7334c81cb.html [L]

(注意:要是文件的话,格式要这样子设置:

RewriteRule /文件+后缀 /文件+后缀 [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]

安装说明:
1. 将Rewrite.dll拷贝到c:Rewrite.dll(也可以拷贝到C:WINDOWS目录内,位置根据喜好可以自由放置);

(还有一点,就是叫管理员给足够的权限给你,要不然帮你安装了也可能会用不了。)
2. 在IIS的Isapi上添加这个筛选器, 筛选器名称Rewrite,可执行文件选择Rewrite.dll;
3. 重新启动IIS,成功后会有如下显示:

4. httpd.ini 是配置文件,如果您了解Rewrite 规则,可以直接对其进行编辑;
5. 默认规则为wordpress专用,其他PHP程序伪静态无法使用;
备注:在前三项成功完成后,将httpd.ini传送到网站跟目录就完成了伪静态环境搭建,下边开始进入后台,设置永久链接采用自定义方式,代码可以参考官方:http://codex.wordpress.org/Using_Permalinks,设置您喜欢的显示方式即可[例子:/%category%/%postname%.html 含义是按照分类目录名称/内容页名称.html方式,增加html就是大家喜欢看到的静态标识 ]伪静态就这样建立完成了;
附件下载

rewrite与httpd.ini文件下载

备用下载地址:
http://www.namipan.com/d/rewrite.rar/f9f582ce55c17cc6e143c68323dd0b0f98c67e125edf0000

2008.10.27日更新(以上代码已更新,复制即可使用):
增加了对Google网站sitemap.xml的支持;
RewriteRule /sitemap.xml /sitemap.xml [L]

-----------------完美分割线-----------------------

后记:一些使用windows live writer写博客的朋友,请添加一条,不然验证不通过。

RewriteRule /xmlrpc.php /xmlrpc.php [L]

以此类推,以后遇到调用不了的文件,可以尝试写条规则来解除限制就行了。要不然就自动转到404页面了。最后,祝使用win主机的朋友能用上静态网页,呵呵。

有问题,请留言,我根据自己的能力,会尽量解决和回复。

3 评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注