2014-01-21 3 views
0

Я переписал свой сайт с чистых путей HTML-файлов до URL-адресов без ссылки на 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 Routing - добавление расширения .html в маршруты] (http://stackoverflow.com/questions/9331516/asp-net-mvc-routing-add-html-extension-to-routes) –

+0

MVC использует только .cshtml и .aspx страницы. Почему вы не пытаетесь разместить весь свой HTML-файл в файле cshtml –

+0

Я сделал это. Проблема в том, что старые ссылки, которые существуют в google, получают 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

nope, не работает. На самом деле это то, что я сказал в этой должности, что я делаю, и не работал. –

+0

Это будет работать, если вы также обновите раздел «обработчики» в разделе «system.webServer» в файле web.config. Подробнее здесь: http: //weblogs.asp.нетто/jongalloway/жерех-сетчатая MVC маршрутизация перекрывающей-файлы-запросы, как индекс-HTML-и-что-он-учит-о-хау маршрутизацию работы –

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 Rewrite (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 в какой-то момент, и это не будет частью вашего приложения; что также означает, что вам не нужно перекомпилировать приложение для внесения изменений.

Смежные вопросы