views:

1442

answers:

4

My employer uses MOSS 2007 for our company intranet. It runs solely on secure http and is also exposed to the outside world via ISA. I currently have a request to add a forwarding URL to our site so that something like the following will occur:

intranet.mycompany.com/vanityname
redirects to -> intranet.mycompany.com/somedeeplink/default.aspx

I fully expect this sort of thing will become more popular with our users as time goes on. So I am looking for a solution that scales. I have read various articles about creating a /site/ with forwarding meta tags or a forwarding SharePoint page type. I've also seen some that talk about adding virtual directories, etc directly in IIS. All these solutions seem to be overkill and inevitably take up more memory or processing time on the web servers.

I am currently leaning towards writing an http module that can be configured in the web.config and perform redirects. I wanted to get feedback to see if anyone else has done something similar in SharePoint 2007 and had any suggestions. Again, I'd like to implement something that scales without making major changes later on and is going to put minimal processing burden on our web servers. Thanks!

A: 

Depending on the number of redirects you might want to implement an HTTP module as stated) but how about checking out

FREE -> http://www.codeplex.com/sharepointsmart404

+1  A: 

If you are open to paying for a solution. Have a look:

NOT FREE -> http://www.muhimbi.com/Products/SharePoint-URL-Shortener.aspx

+1  A: 

Ive implemented url redirecting with MOSS using the HTTP module route. I documented the code I used and what parameters worked the best for me here;

http://scaredpanda.com/2008/08/url-rewriting-with-sharepoint-moss-2007/

Take a look and let me know if this helps you and if you have any questions.

Update: The link above is no longer valid, so here text from the page that I used for URL redirect.

After messing around for a little bit it, I came up with a good way to do it. When I was looking for examples on the web there were a lot of people saying that it couldnt be done. But in the end it actually didn’t take much to implement it. Here’s an HttpModule that I wrote to do the work.

The key pieces are the this.app.BeginRequest += new EventHandler(app_BeginRequest) which steps in front of the request and allows the module to get its redirect on.

And HttpContext.Current.RewritePath(redirect, false); will push the necessary headers n such forward so that the receiving .aspx page will understand how to correctly post back.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;
using System.Collections;
using System.Text;
using System.Web;
using System.Web.Caching;
using System.Web.SessionState;
using System.Security.Cryptography;
using System.Configuration;
using System.Threading;
using System.IO;
using System.Security;
using System.Security.Principal;

namespace ScaredPanda
{
    public sealed class RewriteHttpModule : IHttpModule
    {
        HttpApplication app = null;
        ///
        /// Initializes the httpmodule
        ///
        public void Init(HttpApplication httpapp)
        {
            this.app = httpapp;
            this.app.BeginRequest += new EventHandler(app_BeginRequest);
        }

        public void app_BeginRequest(Object s, EventArgs e)
        {
            try
            {
     //determine if the income request is a url that we wish to rewrite.
     //in this case we are looking for an extension-less request
                string url = HttpContext.Current.Request.RawUrl.Trim();
                if (url != string.Empty
                    && url != "/"
                    && !url.EndsWith("/pages")
                    && !url.Contains(".aspx")
                    && url.IndexOf("/", 1) == -1)
                {
                    //this will build out the the new url that the user is redirected
                    //to ie pandas.aspx?pandaID=123
                    string redirect = ReturnRedirectUrl(url.Replace("/", ""));

         //if you do a HttpContext.Current.RewritePath without the 'false' parameter,
                    //the receiving sharepoint page will not handle post backs correctly
         //this is extremely useful in situations where users/admins will be doing a
                   //'site actions'  event
                   HttpContext.Current.RewritePath(redirect, false);
                }
            }
            catch (Exception ex)
            {
                //rubbish
            }
        }
    }
}
Clint
Thanks, after reviewing the feedback this was the best fit for my situation. I took a look at your code and was able to refactor it to precisely fit my needs. I'd love to post it but it doesn't look like the comment system here will allow me to (not enough characters). Thanks again!
Scott Fox
+1  A: 

Have you looked into Alternate Access Mappings?

http://technet.microsoft.com/en-us/library/cc263208.aspx

Ajay Nayak
Beat me to it. You can do accomplish a lot easily with AAMs.
Chrisb
This appears to be limited to protocol, host and port. I need to redirect deep links. Although I wasn't aware of this feature so I appreciate the info!
Scott Fox