从请求中剥离 .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>
我正在尝试将带有 .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>