views:

255

answers:

3
+1  Q: 

Redirecting URL's

How can I redirect www.mysite.com/picture/12345 to www.mysite.com/picture/some-picture-title/12345? Right now, "/picture/12345" is rewritten on picture.aspx?picid=12345 and same for second form of url (picture/picture-title/12323 to picture.aspx?picid12323) I can't just rewrite first form of url to second because i have to fetch picture title from database.

On the first hand, problem looks very easy but having in mind time to parse every request, what would be the right thing to do with it?

+3  A: 

Not knowing what is the ASP.NET technology (Webforms or MVC) I will assume it's WebForms.

You can have a look at URL Redirecting and build you own rules. And you do this one time only to apply to all of the links that look like you want.

Scott Guthrie has a very nice post about it.

If what you want is to when it comes to that address redirect to a new one, it's quite easy as well.

First of all let's reuse the code, so you will redirect first to a commum page called, for example, redirectme.aspx

in that page you get the REFERER address using the ServerVariables or passing the Url in a QueryString, it's your chooise and then you can attach the title name, like:

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));
}

to save time on the server do this on the first Page event

protected void Page_PreInit(object sender, EventArgs e)
{
    Redirect();
}
balexandre
A: 

I'm presuming you need a common pattern here and not just a once off solution. i.e. you'll need it to work for 12345 & 12346 & whatever other IDs as well. You're probably looking for URLRedirection and applying a Regular Expression to identify a source URI that will redirect to your Target URI

Eoin Campbell
yes, that's my problem.. what is THE solution?
Ante B.
go and read the article by Scott Guthrie that the balexandre posted. It requires several hundred lines of code, that I'm not going to post in an answer. All the sample code/examples you need are in that article.
Eoin Campbell
+1  A: 

If you're running IIS7 then (for both webforms and MVC) the URL rewriting module (http://learn.iis.net/page.aspx/460/using-url-rewrite-module/) is worth looking at.

Supports pattern matching and regular expressions for redirects, state whether they're temporary or permanent, plus they're all managable through the console. Why code when you don't have to?

Jon Hopkins
The URL Rewrite module is by far the easiest if you are running on IIS7. The catch would be to make sure that the new URL is used when you render the pages.
John Clayton