Asp.NET MVC3 中的文件的 URL 重定向?(饲料燃烧器)



我在XML文件中设置了一个播客提要,我当前的订阅者使用直接文件URL订阅了它。(所以 http://website.com/feed.xml) 我一直在阅读有关如何使用 FeedBurner 设置该 XML 文件的副本,强制对 FeedBurner 文件进行所有未来的更新,然后设置从旧 XML URL 到新 FeedBurner URL 的重定向以跟踪订阅者(我的主要目标)。

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

不幸的是,我

看到的所有关于这个主题的教程都假设我有一个Apache服务器,我可以修改.htaccess文件,所以我一直在摸索一种方法来在我的MVC3网站上获得相同的结果。

到目前为止,我已经尝试了两种不同的方法:

在我的 Web.config 的"system.webServer"部分添加 url 重写规则

<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中也收到关于"重写"元素如何不是"system.webServer"的有效子元素的警告,所以我不确定这是否是正确的实现,但这就是我看到的其他示例编写的方式。

我尝试的另一种方法是创建一个路由,如果对旧URL发出请求,该路由会将HTTP响应更改为301重定向到新的FeedBurnerURL。

网址路由类:

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不会更改。

我还看到了很多关于设置重定向到新操作的新控制器操作的建议,但在这种情况下,它只是一个文件,而不是视图操作或网页,所以我认为这不适用于这里。

关于这个主题的任何指导将不胜感激!

通了...我没有解释 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>

相关内容

  • 没有找到相关文章

最新更新