登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

糟老頭的地盤

老頭的地盤听老頭的

 
 
 

日志

 
 

Wordpress在Win-iis中的完美rewrite实现方法  

2010-01-30 23:50:14|  分类: study |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

要说Wordpress中的完美工作环境,当然要属于Lamp平台,或是稍微逊色一点的Wamp平台;但是由于某此特殊原因,我们没有选择它们,而是选择了Windows+iis+MySql+Php,我把它统称为:Wimp平台。

这次我要说的就是如何在Wimp平台中实现Wordpress的完美URL结构!

例:http://www.phplamp.org/2008/06/wp-iis-isapi/ (本文的URL)

用过Wordpress的应该都知道,实现这样的URL只需要在后台中:Settings->permalinks,然后设置成自己中意的URL就行了。但是前提是您的空间支持 rewrite || 您的虚拟主机支持 .htaccess。Lamp,Wamp中只要开启加载mod_rewrite模块就行了。但是Wimp却不是这么简单的,它如果想实现rewrite功能只能借助于第三方的ISAPI组件。

如现在比较火的:http://www.helicontech.com/isapi_rewrite/ 这是一个国外的组织专门为IIS写的ISAPI Rewrite组件,非常类似于Apache的mod_rewrite。有免费版与收费版!很多网友说实现WP在IIS中的rewrite功能只需要下载一个它的组件就OK了。我在本地测试了好一阵子,没有成功,而且用它的比较麻烦,还要自己写rewrite规则!(没有成功可能是我没写正确规则,汗!)。最后我放弃了它……

下面说一下本博客中(phplamp.org)用到的ISAPI组件吧:

wp-url-rewriting.dll 下载地址:http://code.google.com/p/wp-url-rewriting-on-iis/downloads/list

这是位好心的牛人专门为工作于iiS中的WP写的ISAPI rewrite组件,用它您根本就不用写rewrite规则,您只需要将其加载到您的ISAPI中,然后进wp后台定义自己的permalinks即可。 假如你用的是虚拟主机的话,您可以联系您的空间商让其为您添加上这个组件。从此您的WP也可以完美rewrite了。

注意:本文还没有完呢!

当我们定义好permalinks后,可能您会发现,我们点击中文标量的文章链接时说找不到网址。

例:http://www.phplamp.org/2008/06/php%e4%b8%ad%e7%9a%84%e6%96%87%e7%ab%a0/

这是因为:WP的编码为utf-8,而这篇文章的URL中Slug(上链接红色部分)编码为gbk。然后WP取得文章Slug后,通过它来查找文章就会找不到!因为编码不同呀。

更改方法:

wp-include/classes.php中(44-50行)

PHP代码

  1. if ( isset($_SERVER['PATH_INFO']) )   
  2.     $pathinfo = $_SERVER['PATH_INFO'];   
  3. else  
  4.     $pathinfo = '';   
  5.     $pathinfo_array = explode("?", $pathinfo);   
  6.     $pathinfo = str_replace("%", "%25", $pathinfo_array[0]);   
  7.     $req_uri = $_SERVER['REQUEST_URI'];  

替换为下(转换$_SERVER['PATH_INFO']和$_SERVER['REQUEST_URI']的编码):

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");  

这个操作的意思就是:将Slug的编码由GBK转换为utf-8(您也可以用iconv,或是其它的函数来代替mb_convert_encoding)。

《-结束-》

 

http://www.phplamp.org/2008/06/wp-iis-isapi/

 

 

另外一个

解决wordpress ISAPI网页静态化

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

 

最近使用wordpress建立了这个八喜博客,首先国外的程序环境要求和国内的好多差异,采用ISAPI_Rewrite后怎么也无法静态化,静态化成功后网址中必须带有index.php,本来无法去掉也无所谓;当文章翻页的时候发现了问题,主页的分页到第二页第三页....都无法打开,原因是地址中竟然多了一个index.php(例如:index.php/index.php/pag这样了,url完全错误了),许多人说环境问题,无奈下开始考虑重新来考虑静态问题,分析思路采用Discuz论坛哪种伪静态方式比较不错,那么为什么discuz可以,却在wordpress不可以呢,功夫不负有新人,昨天晚上调试成功了,和大家分享一下。

首先你的服务器加载了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]

安装说明:

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

2. 在IIS的Isapi上添加这个筛选器, 筛选器名称Rewrite,可执行文件选择Rewrite.dll;

3. 重新启动IIS,成功后会有如下显示:

Wordpress在Win-iis中的完美rewrite实现方法 - 糟老头 - 糟老頭的地盤

4. httpd.ini 是配置文件,如果您了解Rewrite 规则,可以直接对其进行编辑;

5. 默认规则为wordpress专用,其他PHP程序伪静态无法使用;

备注:在前三项成功完成后,将httpd.ini传送到网站跟目录就完成了伪静态环境搭建,下边开始进入后台,设置永久链接采用自定义方式,代码可以参考官方:http://codex.wordpress.org/Using_Permalinks,设置您喜欢的显示方式即可[例子:

/%category%/%postname%.html 含义是按照分类目录名称/内容页名称.html方式,增加html就是大家喜欢看到的静态标识

 ]伪静态就这样建立完成了;

附件下载

rewrite与httpd.ini文件下载

2008.10.27日更新(以上代码已更新,复制即可使用):

增加了对Google网站sitemap.xml的支持;

RewriteRule /sitemap.xml /sitemap.xml [L]

  评论这张
 
阅读(1136)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018