如何重定向至www.mysite.com/picture/some-picture-title/12345?现在,"/ picture /12345“在picture.aspx?picid=12345上被重写了,对于第二种形式的url (图片/图片标题/12323到picture.aspx?picid12323)也是一样的。我不能仅仅把第一种形式的url重写为第二种形式,因为我必须从数据库中获取图片标题。
首先,问题看起来很简单,但是考虑到有时间来解析每个请求,那么正确的做法是什么?
发布于 2009-05-06 08:42:41
由于不知道什么是ASP.NET技术(Webforms或MVC),我将假定它是WebForms。
您可以查看URL重定向并构建自己的规则。你这样做一次,只是为了应用于所有看起来像你想要的链接。
Scott Guthrie有一个关于它的very nice post。
如果你想要的是重定向到一个新的地址,这也很简单。
首先,让我们重用代码,因此您将首先重定向到一个名为redirectme.aspx的普通页面
在该页面中,您可以使用ServerVariables或在QueryString中传递REFERER地址,这是您选择,然后您可以附加标题名称,如下所示:
private void Redirect()
{
// get url: www.mysite.com/picture/12345
string refererUrl = Request.ServerVariables["HTTP_REFERER"]; // using the ServerVariables or Request.UrlReferrer.AbsolutePath;
//string refererUrl = Request.QueryString["url"]; // if you are redirecting as Response.Redirect("redirectme.aspx?" + Request.Url.Query);
// split the URL by '/'
string[] url = refererUrl.Split('/');
// get the postID
string topicID = url[url.Length-1];
// get the title from the post
string postTitle = GetPostTitle(topicID);
// redirect to: www.mysite.com/picture/some-picture-title/12345
Response.Redirect(
String.Format("{0}/{1}/{2}",
refererUrl.Substring(0, refererUrl.Length - topicID.Length),
postTitle,
topicID));
}要节省服务器上的时间,请在first Page事件上执行此操作
protected void Page_PreInit(object sender, EventArgs e)
{
Redirect();
}发布于 2009-05-06 10:40:11
如果您运行的是IIS7,那么(对于webforms和MVC) URL重写模块(http://learn.iis.net/page.aspx/460/using-url-rewrite-module/)是值得一看的。
支持模式匹配和正则表达式的重定向,声明它们是临时的还是永久的,而且它们都可以通过控制台进行管理。为什么要在没有必要的情况下编写代码呢?
发布于 2009-05-06 08:48:12
我假设你需要一个通用的模式,而不仅仅是一次性的解决方案。也就是说,你需要它在12345和12346下工作&不管其他的ID是什么。您可能正在寻找URLRedirection并应用正则表达式来标识将重定向到目标URI的源URI
https://stackoverflow.com/questions/828633
复制相似问题