2014-01-21 92 views
0

我將我的網站從純HTML文件路徑重寫爲MVC 4無擴展網址。如何將所有請求重定向到html文件

現在我想實施規則將所有請求重定向到舊的.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文件,但仍然沒有運氣。

任何想法我「在做錯誤的

+0

可能的重複[ASP.NET MVC路由 - 添加.html擴展到路由](http://stackoverflow.com/questions/9331516/asp-net-mvc-routing-add-html-extension-to-routes ) –

+0

MVC僅使用.cshtml和.aspx頁面。你爲什麼不嘗試把所有的HTML內容放入一個cshtml文件 –

+0

我已經這樣做了。問題是,谷歌中存在的舊鏈接越來越404,所以我需要將它們重定向到我的主頁。 –

回答

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 } 
    ); 
} 
+1

不行,不起作用。事實上,這就是我在帖子中所說的,我正在做而且沒有工作。 –

+0

如果您還更新web.config文件中'system.webServer'下的'處理程序'部分,這將起作用。更多信息在這裏:http://weblogs.asp。淨/ jongalloway/ASP淨MVC路由攔截,文件請求樣指數的HTML和什麼-IT-教 - 關於 - 如何路由,作品 –

2

請routes.RouteExistingFiles真按下面的代碼片段。

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集成-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> 

0

既然你從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重定向,它不會成爲你的應用程序的一部分;這也意味着您不需要重新編譯您的應用程序來進行更改。

相關問題