IIS有两种可以伪静态的工具,一个是UrlRewriter.dll的ISAPI组件,这种重写文件大多是httpd.ini文件,另外一种是iis官方的URL重写工具,今天主要简单介绍一个这个URL重写工具的规则:
它的图标和位置是这样的:
入站规则列表:
这里的规则就是做伪静态的规则,实际上它是一种301跳转。
比如我们打开其中一个规则:
我们可以看到两个关键的地方:
上图中第一红框处即是重写后的url格式的正则表达式。
^forum-(\w+)-([0-9]+).html 这表达什么呢?我们这样理解:1.、 这 表 达 什 么 呢 ? 我 们 这 样 理 解 : 1. 、 作为标识了表达式的开头和结尾;
2. 第一个括号:(\w+),\w代表所有大小写字母、阿拉伯数字的匹配,“+”号代表任意长度,总体意义就是限定一个任意长字符串,全部由字母数字组成,前面中间后面都不能有空格、标点等。
3. 第二个括号:([0-9]+),代表任意长度的0-9的数字字符串。
4. 最后.html,\代表转义符,因为后面的“.”需要转义。
下面的第二处红框即代表了需要重写的URL的格式,即什么样的URL会被转移成第一处红框处的url格式。
forum.php?mod=forumdisplay&fid={R:1}&page={R:2}&{C:1}
这个URL中的{R:1}将代入到正则表达式中的第一个括号内,{R:2}将代入到第二个括号内。{C:1}是规则条件。
其中这种URL重写的工具,是匹配网站根目录下的web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="已导入的规则 1">
<match url="^topic-(.+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="portal.php?mod=topic&topic={R:1}&{C:1}" appendQueryString="false" />
</rule>
<rule name="已导入的规则 2">
<match url="^article-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="portal.php?mod=view&aid={R:1}&page={R:2}&{C:1}" appendQueryString="false" />
</rule>
<rule name="已导入的规则 3">
<match url="^forum-(\w+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="forum.php?mod=forumdisplay&fid={R:1}&page={R:2}&{C:1}" appendQueryString="false" />
</rule>
<rule name="已导入的规则 4">
<match url="^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="forum.php?mod=viewthread&tid={R:1}&extra=page\%3D{R:3}&page={R:2}&{C:1}" appendQueryString="false" />
</rule>
<rule name="已导入的规则 5">
<match url="^group-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="forum.php?mod=group&fid={R:1}&page={R:2}&{C:1}" appendQueryString="false" />
</rule>
<rule name="已导入的规则 6">
<match url="^space-(username|uid)-(.+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="home.php?mod=space&{R:1}={R:2}&{C:1}" appendQueryString="false" />
</rule>
<rule name="已导入的规则 7">
<match url="^blog-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="home.php?mod=space&uid={R:1}&do=blog&id={R:2}&{C:1}" appendQueryString="false" />
</rule>
<rule name="已导入的规则 8">
<match url="^archiver/(fid|tid)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="archiver/index.php?action={R:1}&value={R:2}&{C:1}" appendQueryString="false" />
</rule>
<rule name="品种分类">
<match url="^forum-(\w+)-dogsort-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="forum.php?mod=forumdisplay&fid={R:1}&dogsort={R:2}&page={R:3}" appendQueryString="false" />
</rule>
<rule name="地区分类">
<match url="^forum-(\w+)-dogarea-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="forum.php?mod=forumdisplay&fid={R:1}&dogarea={R:2}&page={R:3}" appendQueryString="false" />
</rule>
<rule name="品种地区分类">
<match url="^forum-(\w+)-dogsort-([0-9]+)-dogarea-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="forum.php?mod=forumdisplay&fid={R:1}&dogsort={R:2}&dogarea={R:3}&page={R:4}" appendQueryString="false" />
</rule>
<rule name="品种地区子地区分类">
<match url="^forum-(\w+)-dogsort-([0-9]+)-dogarea-([0-9]+)-dogareason-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="forum.php?mod=forumdisplay&fid={R:1}&dogsort={R:2}&dogarea={R:3}&dogareason={R:4}&page={R:5}" appendQueryString="false" />
</rule>
<rule name="地区品种分类">
<match url="^forum-(\w+)-dogarea-([0-9]+)-dogsort-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="forum.php?mod=forumdisplay&fid={R:1}&dogarea={R:2}&dogsort={R:3}&page={R:4}" appendQueryString="false" />
</rule>
<rule name="地区子地区品种分类">
<match url="^forum-(\w+)-dogarea-([0-9]+)-dogareason-([0-9]+)-dogsort-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="forum.php?mod=forumdisplay&fid={R:1}&dogarea={R:2}&dogareason={R:3}&dogsort={R:4}&page={R:5}" appendQueryString="false" />
</rule>
<rule name="地区子地区">
<match url="^forum-(\w+)-dogarea-([0-9]+)-dogareason-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="^(.*)$" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="forum.php?mod=forumdisplay&fid={R:1}&dogarea={R:2}&dogareason={R:3}&page={R:4}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
注意规则名称 rule name不可重名,否则网站会报错~