乌徒帮技术范儿技术中心服务器配置 › httpd.ini详解:IIS服务器实现网址伪静态

httpd.ini详解:IIS服务器实现网址伪静态

分类:服务器配置

网站建设入门过程中,你一定会遇到一个问题:网址伪静态,本文将讲解在windows主机上,IIS服务器开通重写模块后httpd.ini详解,实现这一功能。

网址伪静态,即通过某种手段,用一个干净的网址替代原本动态的看上去不舒服的网址。例如,我们用www.utubon.com/120替代了www.utubon.com/?p=120这看上去效果不是很明显,然而当域名之后的参数很多的时候,用一连串的&符号链接,那就会很难看。而通过网址伪静态,就可以让网址变的简短、干净。

我们玩儿wordpress都会在后台启用固定链接功能,在apache服务器上这很容易实现,然而在IIS服务器上,必须借助httpd.ini来实现,可是并非所有的空间商都为你开通了支持httpd.ini的功能,免费空间基本都不支持。所以,要阅读本文下面的内容,你需要先询问你的空间服务商,你的空间是否已经支持httpd.ini重写。如果是windows的独立主机,可以通过配置服务器的方法,也不需要阅读下面的内容,看这篇文章。

在以前的一篇文章中,乌徒帮已经介绍过了httpd.ini实现wordpress重写的方法,还给出了一些绑定子目录的代码,本文就不重复了,本文主要进行httpd.ini详解,让读者较为全面的理解httpd.ini实现网址伪静态。(除网址伪静态之外的功能暂时不讲)

1、短代码一窥httpd.ini功能

[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32

RewriteRule /([0-9]+)(.*) /forum\.php\?gid=$1$2
RewriteRule /forum-([0-9]+)-([0-9]+)\.html(.*) /forum\.php\?mod=forumdisplay&fid=$1&page=$2$3
RewriteRule /thread-([0-9]+)-([0-9]+)-([0-9]+)\.html(.*) /forum\.php\?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2$4

这是我从discuz X2.5的httpd.ini重写中抠出来的一段重写代码。实现httpd.ini网址伪静态,即网址重写,只需要在本地新建一个httpd.ini文件,用记事本进行编辑,然后上传到网站的WEB根目录,记住,一定是空间商提供的空间更目录,如果你用它绑定了子目录,放在子目录下是没有用的,所以在上面的那篇文章中我给出的代码实现了先绑定子目录,然后将wordpress安装在绑定的域名下,最后实现重写,是非常复杂的,基本没有人实现过,独此一家【得瑟】!

2、分析httpd.ini内的代码结构

如果你已经确信自己的IIS空间支持了httpd.ini,并知道了它怎么起作用,那么就可以用它来实现网址伪静态了。那么应该在httpd.ini中写什么内容呢?让我们来看一下。

[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32

开头,声明httpd.ini重写开始。其中我发现只用[ISAPI_Rewrite]就可以了,虽然我们喜欢更多的代码,显得很专业,但是只要起作用就可以了。

接下来开始写网址伪静态的规则

RewriteRule /forum-([0-9]+)-([0-9]+)\.html(.*) /forum\.php\?mod=forumdisplay&fid=$1&page=$2$3

上面这段代码分为三个部分:

RewriteRule - 表示这是一条重写规则,是固定格式,应该不区分大小写,没有尝试过。

/forum-([0-9]+)-([0-9]+)\.html(.*) - 是要使用的访问地址,以后你就可以用这个网址来代替原网址了。

/forum\.php\?mod=forumdisplay&fid=$1&page=$2$3 - 原网址,被新网址替换。

那么是怎么实现网址伪静态,网址的替换的呢?你可以看到上面有()和$1这样格式的字符段,在要使用的访问网址(Y)中,我们用()来代替这个地方将被后面的原网址(U)中的$1替换,()中使用正则表达式进行匹配,即当你输入一个网址时,如果你的网址符合Y匹配的结果,那么就会按照这条规则进行再次解析,用新网址代替旧网址访问页面,但实际上新网址是没有对应某个文件或目录的,因此,我们称之为网址伪静态。

在匹配中,Y中的第一个()对应$1,第二个()对应$2,以此类推,多少个()对应多少个$,()的位置并不代表$的先后顺序,例如你可以伪静态?fid=$2&aid=$1这样的网址,$后面的数字才对应()的先后顺序。

3、正则表达式

要学习网址伪静态,接触正则表达式是必须的,你可以不用很懂很深入,但是简单的必须会。正则表达式是一种匹配方法,它通过各种符号,对字符串中的出现情况进行匹配。点击这里看百度百科中正则表达式的介绍。本文将正则表达式中一些重要的标记摘录出来,其他学习需要读者自己查阅资料,本文不多述。

元字符 描述
.点 匹配任何单个字符。例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不匹配root。
$ 匹配行结束符。例如正则表达式weasel$ 能够匹配字符串"He's a weasel"的末尾
但是不能匹配字符串"They are a bunch of weasels."
^ 匹配一行的开始。例如正则表达式^When in能够匹配字符串"When in the course of human events"的开始,但是不能匹配"What and When in the"
* 匹配0或多个正好在它之前的那个字符。例如正则表达式 .* 意味着能够匹配任意数量的任何字符。比如<T>.*</T> 可以匹配<T>不管是什么</T>
\ 这是引用符,用来将这里列出的这些元字符当作普通的字符来进行匹配。例如正则表达式\$被用来匹配美元符号,而不是行尾,类似的,正则表达式\.用来匹配点字符,而不是任何字符的通配符。
[ ]
[c1-c2]
[^c1-c2]
匹配括号中的任何一个字符。例如正则表达式r[aou]t匹配rat、rot和rut,但是不匹配ret。可以在括号中使用连字符-来指定字符的区间,例如正则表达式[0-9]可以匹配任何数字字符;还可以制定多个区间,例如正则表达式[A-Za-z]可以匹配任何大小写字母。另一个重要的用法是“排除”,要想匹配除了指定区间之外的字符——也就是所谓的补集——在左边的括号和第一个字符之间使用^字符,例如正则表达式[^269A-Z] 将匹配除了2、6、9和所有大写字母之外的任何字符。
\< \> 匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\<the\>能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:这个元字符不是所有的软件都支持的。
\( \) 将 \( 和 \) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。
| 将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。
+ 匹配1或多个正好在它之前的那个字符。例如正则表达式9+匹配9、99、999等。注意:这个元字符不是所有的软件都支持的。
? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。
{i}
{i,j}
匹配指定数目的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]{3} 能够匹配字符"A"后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。而正则表达式[0-9]{4,6} 匹配连续的任意4个、5个或者6个数字字符。注意:这个元字符不是所有的软件都支持的。

4、其他httpd.ini实现网址伪静态的边边角角

除了上文介绍的这些知识外,你可能还会看到一些上文中没有提到的内容,例如使用httpd.ini实现301重定向,以及匹配结束的[I,R,F,L,O]等标记,否子戈(新网名)没有找到具体的一些解释,应该是表示改行是否结束、是否忽略大小写、是否强制执行等命令吧。

填写个人信息,赶快回复吧!