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 http://dominio/ o http://dominio/loquesea te lleve a http://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 http://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 == “http://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 =”http://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

Comments (0)