如何将所有请求重定向到html文件

时间:2014-01-21 05:20:45

标签: asp.net-mvc asp.net-mvc-4 redirect url-redirection

我将我的网站从纯HTML文件路径重写为MVC 4无扩展网址。

现在我想实现规则,将所有请求重定向到旧的.html文件到我的主页。

routeConfig.cs我尝试了这个:

        routes.MapRoute(
            name: "Redirects",
            url: "posts/{page}.html",
            defaults: new { controller = "Home", action = "Index" }
        );

但是,无论我尝试什么,我都会获得404.我看起来MVC正在处理.html文件并忽略我的Route条目。

我也尝试过:

routes.IgnoreRoute( “帖子/ {文件}的.html”);

告诉MVC不处理.html文件,但仍然没有运气。

任何想法我做错了什么?

3 个答案:

答案 0 :(得分:2)

请根据以下代码段将routes.RouteExistingFiles设为true。

routes.RouteExistingFiles = true;

        routes.MapRoute(name: "Redirects",
            url: "HtmlPage.html",
            defaults: new { controller = "Home", action = "Html", page = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

同时编辑您的web.config并将PageHandlerFactory-Integrated-HTML处理程序添加到处理程序列表中,如下面的代码片段所示。

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  <add name="PageHandlerFactory-Integrated-HTML" path="*.html"
           verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory"
           resourceType="Unspecified" preCondition="integratedMode" />
</handlers>

答案 1 :(得分:1)

请尝试这样,路由现有文件我完成的RegisterRoutes调用如下所示(如this post中所述):

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.RouteExistingFiles = true;

routes.MapRoute(
    name: "CrazyPants",
    url: "{page}.html",
    defaults: new { controller = "Home", action = "Html", page = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

答案 2 :(得分:1)

由于您正在从HTML迁移到MVC,我认为您不应该将迁移作为应用程序的一部分。 而是使用URL重写模块(URL Rewrite)来重定向请求。

您可以使用IIS管理控制台配置重定向规则,或直接编辑web.config。

以下是web.config中可能与您的案例相关的规则示例:

<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <rule name="Html to MVC" stopProcessing="true">
                <match url=".*/(.*).html" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" />
                </conditions>
                <action type="Redirect" url="/Index/{R:1}" redirectType="Found" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
</configuration>

它可能不是您需要的完美规则(进行一些测试和调整),但我相信这是您需要的方式。这样你就可以在某个时候最终摆脱HTML重定向,它不会成为你应用程序的一部分;这也意味着您无需重新编译应用程序即可进行更改。