IIS重写删除.html导致404 Not Found

时间:2017-12-20 11:40:34

标签: asp.net-web-api url-rewrite-module iis-10

我正在使用ASP.NET Web API并尝试将带有.html(http://www.example.com/api/TestPlay/Main/Authenticate.html)的URL重写为没有(http://www.example.com/api/TestPlay/Main/Authenticate)的URL,该URL路由到名为" TestPlay&#34的区域;,控制器名为" MainController"和动作命名"认证"。但是,我得到的只是404 Not Found。

我在web.config中安装了URL Rewrite Module 2.1和以下代码。还有什么我应该做的吗?

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Test Rewrite" stopProcessing="false">
                <match url="(.*)/api/TestPlay/(.*).html(.*)" />
                <action type="Rewrite" url="{R:1}/api/TestPlay/{R:2}" />
            </rule>
        </rules>
    </rewrite>
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <remove name="OPTIONSVerbHandler" />
        <remove name="TRACEVerbHandler" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

1 个答案:

答案 0 :(得分:0)

你的规则中的正则表达式是错误的。正确的规则应该是:

<rule name="Test Rewrite" stopProcessing="false">
    <match url="^api/TestPlay/(.*).html" />
    <action type="Rewrite" url="/api/TestPlay/{R:1}" />
</rule>

因为<match url="中的regexp应该是请求路径的regexp而不是开始斜杠。例如,在您的情况下,URL重写会将此字符串api/TestPlay/Main/Authenticate.html与正则表达式^api/TestPlay/(.*).html进行比较