在 IIS7 URL 重写模块中,我可以在重定向规则中指定不适用于 http-post 请求吗?

Posted

技术标签:

【中文标题】在 IIS7 URL 重写模块中,我可以在重定向规则中指定不适用于 http-post 请求吗?【英文标题】:In the IIS7 URL Rewrite module, can I specify in a redirect rule to not apply to http-post requests? 【发布时间】:2011-08-25 01:18:59 【问题描述】:

我正在使用 Microsoft 提供的模板来小写所有 url 并附加一个斜杠。但是,我有一个不符合此规范的 AJAX 发布请求,但它们破坏了我们将它们重写为 301。我不担心 SEO 的 POST 请求,所以我更愿意在规则中指定忽略它。以下是我的规则:

            <rule name="AddTrailingSlashRule" stopProcessing="true">
                <match url="(.*[^/])$" />
                <conditions>
                    <add input="REQUEST_FILENAME" matchType="IsDirectory" negate="true" />
                    <add input="REQUEST_FILENAME" matchType="IsFile" negate="true" />
                </conditions>
                <action type="Redirect" url="R:1/" />
            </rule>
            <rule name="LowerCaseRule" stopProcessing="true">
                <match url="[A-Z]" ignoreCase="false" />
                <action type="Redirect" url="ToLower:URL" />
            </rule>

【问题讨论】:

【参考方案1】:

在条件下,您可以在REQUEST_METHOD 变量中访问它。

<add input="REQUEST_METHOD" matchType="Pattern" pattern="POST" ignoreCase="true" negate="true" />

【讨论】:

我只是在 IIS 的规则系统中磕磕绊绊才发现的。当您键入第一个 时,“添加条件”窗口会在输入字段上提供智能感知体验。 感谢您的回答。尽管我发现您需要在这种情况下指定 negate="true" 以便重写规则适用于不是 REQUEST_METHOD = POST 的内容,但这对我有很大帮助。 伟大的收获,@thinkzig!我在使用它的地方肯定有那个negate;我一定是在洗牌时把它弄丢了。我现在已经更正了答案。【参考方案2】:

不久前我们遇到了与 OP 相同的问题,然后应用了 patridge 的解决方案,该解决方案运行良好,直到我们注意到一些 REST DELETE 调用会失败。原来是尾部斜杠重定向使 GET 从 DELETE 请求中取出。

所以我修改了解决方案,使重定向规则仅适用于 GET 请求。

<add input="REQUEST_METHOD" matchType="Pattern" pattern="GET" ignoreCase="true" />

【讨论】:

以上是关于在 IIS7 URL 重写模块中,我可以在重定向规则中指定不适用于 http-post 请求吗?的主要内容,如果未能解决你的问题,请参考以下文章

IIS7实现访问HTTP定向至HTTPS访问

xml url在iis7x及更高版本上将http重写为https重定向

IIS7 301 URL 重写给出 200 状态而不是 301 状态

iis url重写模块 是干啥用的

带有 URL 重写模块的 IIS 7.5 在回发时将 QueryString 参数加倍

路由与 URL 重写 (IIS7) 性能