我在XML文件中设置了播客源,我当前的订阅者使用直接文件URL订阅它。 (所以http://website.com/feed.xml)我一直在阅读如何使用FeedBurner设置该XML文件的COPY,强制所有未来的更新都在FeedBurner文件上进行,然后只需设置旧的重定向XML url到新的FeedBurner URL以跟踪订阅者(我的主要目标)。
http://underscorebleach.net/jotsheet/2005/07/feedburner-rss-migration
不幸的是,我在这个主题上看到的所有教程都假设我有一个Apache服务器而且我可以修改.htaccess文件,所以我一直在摸索一种在我的MVC3网站上获得相同结果的方法。 / p>
到目前为止,我尝试了两种不同的方法:
在我的Web.config
的“system.webServer”部分添加网址重写规则<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重定向到新的FeedBurner网址。
网址路由类:
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 :(得分:0)
想出来......我没有解释URL重写规则的“条件”部分。当我希望重定向对旧的feed文件的所有请求时,它仅限于来自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>