IIS 重写删除 .html 导致 404 Not Found
IIS Rewrite removing .html resulting in 404 Not Found
我正在使用 ASP.NET Web API 并尝试用 .html (http://www.example.com/api/TestPlay/Main/Authenticate.html) to one without (http://www.example.com/api/TestPlay/Main/Authenticate) 重写一个 URL ,它路由到一个名为 "TestPlay",名为 "MainController" 的控制器和名为 "Authenticate" 的操作。但是,我得到的只是 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>
你的规则中的正则表达式是错误的。正确的规则应该是:
<rule name="Test Rewrite" stopProcessing="false">
<match url="^api/TestPlay/(.*).html" />
<action type="Rewrite" url="/api/TestPlay/{R:1}" />
</rule>
因为 <match url="
中的正则表达式应该是请求路径的正则表达式,没有开始斜杠。例如,在您的情况下 URL 重写会将此字符串 api/TestPlay/Main/Authenticate.html
与正则表达式 ^api/TestPlay/(.*).html
进行比较
我正在使用 ASP.NET Web API 并尝试用 .html (http://www.example.com/api/TestPlay/Main/Authenticate.html) to one without (http://www.example.com/api/TestPlay/Main/Authenticate) 重写一个 URL ,它路由到一个名为 "TestPlay",名为 "MainController" 的控制器和名为 "Authenticate" 的操作。但是,我得到的只是 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>
你的规则中的正则表达式是错误的。正确的规则应该是:
<rule name="Test Rewrite" stopProcessing="false">
<match url="^api/TestPlay/(.*).html" />
<action type="Rewrite" url="/api/TestPlay/{R:1}" />
</rule>
因为 <match url="
中的正则表达式应该是请求路径的正则表达式,没有开始斜杠。例如,在您的情况下 URL 重写会将此字符串 api/TestPlay/Main/Authenticate.html
与正则表达式 ^api/TestPlay/(.*).html