首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IIS重写规则测试模式错误:要测试的输入数据与模式不匹配

IIS重写规则测试模式错误:要测试的输入数据与模式不匹配
EN

Server Fault用户
提问于 2020-04-11 09:30:02
回答 1查看 1.9K关注 0票数 1

我将此作为指导IISRe书面规则:https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module的工作指南。

对不起-也被问到了SO (https://stackoverflow.com/questions/61149139/iis-url-rewrite-rule-test-pattern-error-the-input-data-to-test-does-not-match-t),但是服务器故障可能更适合这种类型的问题,因此在这里提出。

这是我的第一条规则,使用microsoft文档中的指南:

代码语言:javascript
复制
From: http://localhost/article/342/some-article-title
To: http://localhost/article.aspx?id=342&title=some-article-title

Enter into "Edit Inbound Rule"
Pattern: ^article/([0-9]+)/([_0-9a-z-]+)
Rewrite URL: article.aspx?id={R:1}&title={R:2}

Enter into "Test Pattern"
Input data to test: article/234/some-title
Pattern: ^article/([0-9]+)/([_0-9a-z-]+)
To: article.aspx?id=342&title=some-article-title

它工作得很好,而且测试也很好-这里的屏幕截图:

这是web.config文件中的规则:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <rewrite>
            <rules>
                <rule name="a">
                    <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
                    <action type="Rewrite" url="article.aspx?id={R:1}&title={R:2}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

但是,我想让规则以相反的方式工作,所以我在规则定义中尝试了以下内容:

代码语言:javascript
复制
From: http://localhost/article.aspx?id=342&title=some-article-title
To: http://localhost/article/342/some-article-title

Enter into "Edit Inbound Rule"
Pattern: ^article.aspx?id=([0-9]+)&title=([_0-9a-z-]+)
Rewrite URL: article/([0-9]+)/([_0-9a-z-]+)

Enter into "Test Pattern"
Input data to test: article.aspx?id=342&title=some-article-title
To: article/234/some-title

不幸的是,这不起作用--当我测试模式时,我得到一个“要测试的输入数据与模式不匹配”的响应。

我试图让规则反其道而行的截图:

这是web.config文件中的第二条规则:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <rewrite>
            <rules>
                <rule name="a">
                    <match url="^article.aspx?id=([0-9]+)&title=([_0-9a-z-]+)" />
                    <action type="Rewrite" url="article/([0-9]+)/([_0-9a-z-]+)" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

在第二条规则中,我尝试了是否使用“追加查询字符串”选项(上面的摘录带有勾选选项)。

我想知道我做错了什么?

EN

回答 1

Server Fault用户

发布于 2020-04-11 18:13:11

这是因为您必须像这样转义?:模式中的\?

以下是正确的版本:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <rewrite>
            <rules>
                <rule name="a">
                    <match url="^article.aspx\?id=([0-9]+)&title=([_0-9a-z-]+)" />
                    <action type="Rewrite" url="article/([0-9]+)/([_0-9a-z-]+)" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1011857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档