回复.html扩展名

问题描述 投票:0回答:1

我正在将网站从静态网站移动到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

c# asp.net-mvc iis
1个回答
1
投票

使用适用于新架构的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响应代码返回给浏览器,并透明地将其重定向到新路由。

© www.soinside.com 2019 - 2024. All rights reserved.