HTTPModule redireccion

Hola a todos.

No hace mucho me encontré con un caso en que había que reescribir los headers de IIS que deja Sharepoint en los logs de IIS. El funcionamiento de MOSS 2007 y WSS 3.0 hace que los accesos a ej https://dominio/ o https://dominio/loquesea te lleve a https://dominio/sites/%3Cbienvenida%3E.aspx . Ello conlleva que tu acceso aparezca como un 302 en vez de un 200 y que tu acceso no sea registrado por ningun rastreador de busquedas.

 ATENCIÓN: El siguiente código es un ejemplo explicativo que no tiene porque funcionar per se y al cual no se le da ninguna garantia por parte de Microsoft ,empresa a la que doy servicio, ni por mi parte. El uso se de este código corre por su cuenta y riesgo.

Buscando en internet me topé con la siguiente dirección que me sirvio de gran utilidad https://blog.mastykarz.nl/sharepoint-2007-redirect-solved-using-301-instead-of-302-redirects/ para escribir ese HTTPModule. Trataba el mismo problema pero substituía el 302 por un 301. Así que guiandome por la anterior url desarrollé el siguiente codigo:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using Microsoft.SharePoint;
using System.Text.RegularExpressions;
using Microsoft.SharePoint.Publishing;

namespace Example.Dev.Sharepoint.HttpModules
{
    public class RedirectModule : IHttpModule
    {

        #region IHttpModule Members

        public void Dispose()
        { }

        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);

        }

        void context_BeginRequest(object sender, EventArgs e)
        {

            HttpApplication app = (HttpApplication)sender;
            string requestUrl = app.Request.Url.ToString();
            string destinationUrl = String.Empty;

            if (requestUrl == "https://YOURURL/")
            {

                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    try
                    {
                        using (SPSite site = new SPSite(requestUrl))
                        {
                            using (SPWeb web = site.OpenWeb())
                            {
                                if (PublishingWeb.IsPublishingWeb(web))
                                {
                                    PublishingWeb publishingWeb =
                                    PublishingWeb.GetPublishingWeb(web);
                                    destinationUrl = String.Concat(requestUrl,publishingWeb.DefaultPage.Url);
                                }

                                else

                                    destinationUrl ="https://YOURURL/Pages/Default.aspx?a=1";
                            }
                        }
                    }

                    catch { }

                });

                if (!String.IsNullOrEmpty(destinationUrl))
                {
                    app.Response.AddHeader("Location", destinationUrl);
                    app.Response.StatusCode = 301;
                }
            }
        }
        #endregion
    }
}

Luego puse a Full trust en web.config del sitio en cuestión añadiendo <trust level="Full" originUrl="" />  Añadí la siguiente entrada en la seccion HTTPMODULES del miosmo web.config:

<add name="HTTPmodule" type="Example.Dev.Sharepoint.HttpModules.RedirectModule" /> (El es del tipo type="namespace.Clase")

Luego realice el IISRESET de rigor y ya se empezaron a registrar las redirecciones que queriamos en los logs de IIS,

 Saludos.

Héctor Calvarro Martín. SharePoint Dev. Microsoft Support Engineer for DEV EMEA