C# 响应.html扩展名
我正在将一个网站从静态网站移动到MVC5。我需要创建控制器/操作来响应使用旧URL的请求。(并返回重定向,页面移动)如果我只是在属性路由中硬编码旧的URL,我得到 HTTP错误404.0-找不到您正在查找的资源已被删除、名称已更改或暂时不可用 最好的方法是什么。(我的意思是,如何为扩展名为.html的url创建路由,并由ASP.net响应) 我想现在IIS会看到这个.html文件,并尝试在不通过应用程序的情况下将该文件发送到客户端。如何在共享主机上删除该行为 现在提供的html文件位于不同的文件夹中 例如: 我需要将此URL映射到控制器/操作:C# 响应.html扩展名,c#,asp.net-mvc,iis,C#,Asp.net Mvc,Iis,我正在将一个网站从静态网站移动到MVC5。我需要创建控制器/操作来响应使用旧URL的请求。(并返回重定向,页面移动)如果我只是在属性路由中硬编码旧的URL,我得到 HTTP错误404.0-找不到您正在查找的资源已被删除、名称已更改或暂时不可用 最好的方法是什么。(我的意思是,如何为扩展名为.html的url创建路由,并由ASP.net响应) 我想现在IIS会看到这个.html文件,并尝试在不通过应用程序的情况下将该文件发送到客户端。如何在共享主机上删除该行为 现在提供的html文件位于不同的文件
example.com/services/Renovations.html
我们将把它映射到controller=>services和action=>renovations
example.com/contactus.html
我们将把它映射到controller=>contact,action=>index根据您的新体系结构使用MVC控制器/操作编写您的应用程序,然后在IIS级别实现一组规则,将旧URL映射到新URL。重写规则将存储在
web.config
文件中,该文件便于将配置从Dev移动到Staging,再移动到实时环境
如果您给出一些旧URL及其相应的新路由的示例,我可以为您提供一些与之匹配的示例IIS重写规则。如果您的旧URL遵循一种模式,例如/products/{skucode}.html
等,那么这种方法最有效
编辑:一些示例重写规则以匹配请求的重定向
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Static rewrites" enabled="true" stopProcessing="true" >
<match url="^(.*?\.html)$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Redirect" url="{static site rewrites:{R:1}}" appendQueryString="true" />
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="Static site rewrites" ignoreCase="true">
<add key="contact.html" value="contact" />
<add key="services/renovations.html" value="services/renovations" />
</rewriteMap>
</rewriteMaps>
</rewrite>
</system.webServer>
</configuration>
对于您希望重定向的其他页面,应该清楚如何向
重写映射添加更多键。为了澄清,这些是重定向,将HTTP 301永久移动
响应代码返回到浏览器,并透明地重定向到新路由。谢谢@tianvh,例如,我要更改的两条路线是:/Services/revolution.html到/Services/revolution/Contact.html到/Contact@BenjaminWeblySpeaking.ca我编辑了我的答案,以解决这些例子。感谢您的澄清。实际上,我打算重定向到一个控制器,然后实现301重定向。如果你想重写URL而不是重定向,那么在IIS级别执行此操作可以很容易地进行更改。这样,您的客户机仍然可以在地址栏中看到contact.html
,但现在可以从新的MVC控制器获取内容。要做到这一点,只需将规则
更改为,您提到的规则在我们的开发服务器上非常有效。我们遇到的唯一问题是,我们的客户端正在共享主机上运行,它们不允许通配符重定向。所以我必须为每一页写规则。幸运的是,我们只有7页要重写。下面是一个我使用的规则的例子,它很有效。示例