IIS伪静态URL重写规则入门

433 阅读1分钟

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&amp;topic={R:1}&amp;{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&amp;aid={R:1}&amp;page={R:2}&amp;{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&amp;fid={R:1}&amp;page={R:2}&amp;{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&amp;tid={R:1}&amp;extra=page\%3D{R:3}&amp;page={R:2}&amp;{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&amp;fid={R:1}&amp;page={R:2}&amp;{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&amp;{R:1}={R:2}&amp;{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&amp;uid={R:1}&amp;do=blog&amp;id={R:2}&amp;{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}&amp;value={R:2}&amp;{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&amp;fid={R:1}&amp;dogsort={R:2}&amp;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&amp;fid={R:1}&amp;dogarea={R:2}&amp;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&amp;fid={R:1}&amp;dogsort={R:2}&amp;dogarea={R:3}&amp;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&amp;fid={R:1}&amp;dogsort={R:2}&amp;dogarea={R:3}&amp;dogareason={R:4}&amp;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&amp;fid={R:1}&amp;dogarea={R:2}&amp;dogsort={R:3}&amp;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&amp;fid={R:1}&amp;dogarea={R:2}&amp;dogareason={R:3}&amp;dogsort={R:4}&amp;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&amp;fid={R:1}&amp;dogarea={R:2}&amp;dogareason={R:3}&amp;page={R:4}" appendQueryString="false" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

注意规则名称 rule name不可重名,否则网站会报错~