2012-06-25 3 views
1

У меня есть подкаст, настроенный в XML-файле, и мои текущие подписчики подписываются на него, используя прямой URL-адрес файла. (так http://website.com/feed.xml) Я читал о том, как вы можете настроить COPY этого XML-файла с помощью FeedBurner, заставить все будущие обновления делать в файле FeedBurner, а затем просто настроить перенаправление со старого URL-адреса XML на новый URL FeedBurner, чтобы отслеживать подписчиков (моя главная цель здесь).Перенаправление URL для файла в Asp.NET MVC3? (FeedBurner)

http://underscorebleach.net/jotsheet/2005/07/feedburner-rss-migration

К сожалению, все учебники, которые я видел на эту тему Предположим, у меня есть сервер Apache, и я могу изменить файл .htaccess, так что я теребя способ получить те же результаты на моем веб-сайте MVC3.

До сих пор я пытался 2 различных способа:

Добавление правила URL Rewrite в разделе "system.webServer" моего Web.config

<rewrite> 
    <rules> 
    <rule name="feedburner redirect" enabled="true" stopProcessing="true"> 
     <match url="feed.xml" ignoreCase="true" /> 
     <action type="Redirect" url="http://feeds.feedburner.com/NewFeed" appendQueryString="false" /> 
     <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_USER_AGENT}" pattern="FeedBurner" negate="true" /> 
     </conditions> 
    </rule> 
    </rules> 
</rewrite> 

Это не работает, и Я также получаю предупреждение в Visual Studio о том, что элемент «rewrite» не является допустимым дочерним элементом «system.webServer», поэтому я не уверен, что это правильная реализация, но я так и видел другие примеры написаны.

Другим способом, который я пробовал, является создание маршрута, который изменит ответ HTTP на перенаправление 301 на новый URL-адрес FeedBurner, если будет выполнен запрос на старый URL-адрес.

Url Routing класс:

namespace Routes 
{ 
    public class UrlRoute : RouteBase 
    { 
     public static void RerouteUrls() 
     { 
      var httpContext = HttpContext.Current; 
      string redirectLocation = ""; 

      const string status = "301 Moved Permanently"; 

      string currentUrl = httpContext.Request.Url.ToString().ToLower(); 

      if (currentUrl.Contains("feed.xml")) 
      { 
       redirectLocation = "http://feeds.feedburner.com/NewFeed"; 
      } 
      else 
      { 
       // None of the criteria was met; do not redirect user. 
       return; 
      } 

      // Redirect page 
      httpContext.Response.Clear(); 
      httpContext.Response.RedirectLocation = redirectLocation; 
      httpContext.Response.StatusCode = 301; 
      httpContext.Response.Status = status; 
      httpContext.Response.End(); 
     } 

     public override RouteData GetRouteData(HttpContextBase httpContext) 
     { 
      RerouteUrls(); 

      return null; 
     } 

     public override VirtualPathData GetVirtualPath(RequestContext requestContext, 
                RouteValueDictionary values) 
     { 
      return null; 
     } 
    } 
} 

В Global.asax:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    //... 

    routes.Add(new Routes.UrlRoute()); 

    //... 
} 

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    RegisterRoutes(RouteTable.Routes); 

    Database.SetInitializer<EF4DataContext>(null); 
} 

Но опять же, непосредственно введя "feed.xml" в адресной строке покажет мне старый файл XML, и URL-адрес не изменяется.

Я также видел множество предложений по настройке нового действия контроллера, которое перенаправляет на новое действие, но в этом случае это всего лишь файл, а не действие вида или веб-страницы, поэтому я не думаю который применяется здесь.

Любые рекомендации по этому вопросу были бы высоко оценены!

+0

Просто хотите проверить, установлен ли модуль Url Rewrite правильно? Я не считаю, что это часть базовой установки IIS –

ответ

0

Выяснил это ... Я не интерпретировал раздел «условия» правила перезаписи URL. Это ограничивало правило перезаписи ТОЛЬКО запросам FeedBurner, когда я хочу, чтобы ВСЕ запросы к файлу старого фида были перенаправлены. Поэтому мне просто пришлось удалить этот раздел. Я остался только с этим:

<rewrite> 
    <rules> 
     <rule name="feedburner redirect" enabled="true" stopProcessing="true"> 
      <match url="feed.xml" ignoreCase="true" /> 
      <action type="Redirect" url="http://feeds.feedburner.com/NewFeed" appendQueryString="false" /> 
     </rule> 
    </rules> 
</rewrite> 
Смежные вопросы