从请求中剥离 .html 扩展名并将 .html 请求重定向到 .aspx 页面

Stripping .html extensions from requests and redirecting .html requests to .aspx pages

我正在尝试将带有 .html 扩展名的传入 HTTP 请求指向 .aspx 页面,并在浏览器中重写 URL,这样 .html.aspx 扩展名。

详情:

当用户请求 localhost:123/lorem/ipsum.html 时,我会 return ~/Views/lorem/ipsum.aspx 页面。 URL 应该看起来像 localhost:123/lorem/ipsum.

其中一半由 AspNet.FriendlyUrls 包处理。在我的 RouteConfig.cs 文件中,我有一组这样的规则:

routes.MapPageRoute("Ipsum", "lorem/ipsum", "~/Views/lorem/ipsum.aspx");

这可确保如果用户向 localhost:123/lorem/ipsum 发送请求,则 .aspx 页面会在浏览器 window 中加载正确的 URL 命名法。

我想找到一种方法将其扩展到末尾带有 .html 的传入请求。我尝试添加另一个 RouteConfig.cs 规则将用户从 .html 重定向到 .aspx 页面,希望在 Web 配置中使用 URL 重写以显示 URL正确,但导航到该页面导致 404:

routes.MapPageRoute("Ipsum Html Redirect", "lorem/ipsum.html", "~/Views/lorem/ipsum.aspx");

我对路由管道很困惑。 Web.config rewrite/redirect 规则是否优先于 RouteConfig.cs 规则?有没有办法通过添加 Web.config 重写或重定向规则来解决我的问题,这样它就可以与我的 RouteConfig.cs 规则一起使用?

我最终使用了 Scott Hanselman 的 this 博客 link 来找出问题的解决方案。解决方案是将此代码添加到 Web.config 文件:

<system.webServer>
    <rewrite>
         <rules>
             <rule name="extensionless" stopProcessing="true">
                   <match url="(.*)\.html$" />
                   <action type="Redirect" url="{R:1}" redirectType="Permanent" />
             </rule>
         </rules>
    </rewrite>
</system.webServer>