我正在将网站从静态网站移动到MVC 5.我需要创建控制器/操作来响应具有旧URL的请求。 (并返回重定向,页面移动)如果我只是硬编码属性路由中的旧URL,我得到
HTTP错误404.0 - 未找到您要查找的资源已被删除,名称已更改或暂时不可用
接近这个的最佳方法是什么? (我的意思是我怎么能为一个扩展名为.html的网址制作路由,并且ASP.net会回复它)我认为现在IIS看到.html并尝试将文件发送到客户端而不通过应用。我怎么能在共享主机上删除该行为?
现在正在提供的html文件位于不同的文件夹中。
例:
我需要将此URL映射到控制器/操作:
example.com/services/Renovations.html
我们将它映射到controller => services,以及action => renovations
example.com/contactus.html
我们将它映射到controller => contact,以及action => index
使用适用于新架构的MVC控制器/操作编写应用程序,然后在IIS级别实施一组URL Rewrite规则,将旧URL映射到新URL。重写规则将存储在web.config
文件中,这对于将配置从Dev移动到Staging到Live环境非常方便。
如果您提供一些旧URL和新的相应路由的示例,我可以给您一些示例IIS重写规则来匹配。如果您的旧网址遵循某种模式,例如/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>
应该清楚如何为你要重定向的其他页面添加更多密钥到rewriteMap
。为了澄清,这些是重定向,并将HTTP 301 Moved Permanently
响应代码返回给浏览器,并透明地将其重定向到新路由。