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