Páginas sin extensión en servidores compartidos
Un gran problema, que seguro a más de uno le ha pasado, es el no poder utilizar páginas sin extensión en su proyecto web. Normalmente los proveedores de Internet, supongo que para curarse en salud, no permiten el uso de este tipo de funcionalidades en sus servidores, ya que requiere de la instalación de software de terceros, o simplemente por tocar lo menos posible los servidores.
Generalmente, si necesitas este tipo de funcionalidades, lo que hacen es recomendarte contratar un producto superior, como servidores dedicados.
Un ejemplo sería, en vez de utilizar:
http://www.tuportal.com/pagina.aspx?id=240&sec=12
Utilizar:
http://tuportal.com/titulo-de-mi-pagina
La solución “temporal” que yo he encontrado, de momento (hasta encontrar una más elegante), es utilizar el evento Application_BeginRequest del global.asax y comprobar el QueryString del objeto Request.
Para ello, lo primero que tenemos que hacer es modificar el web.config para que utilize “customErrors”, de la siguiente forma:
<customErrors mode=”On” defaultRedirect=”nuestrapaginadeerror.aspx” />
De esta forma, cuando ocurra un error del tipo “Página no encontrada”, es nuestra aplicación la que gestiona dicho error.
Despues, lo que tenemos que hacer es modificar el evento Application_BeginRequest, para que determine si ha ocurrido un error 401.
public void Application_BeginRequest(object Sender, EventArgs e)
{
string path = HttpContext.Current.Request.Path; // en path estará la página nuestrapaginadeerror.aspx
string queryString = HttpContext.Current.Server.UrlDecode(HttpContext.Current.Request.QueryString.ToString());
string webHttp = “http://” + HttpContext.Current.Request.ServerVariables["SERVER_NAME"];// cuando ocurre un error 401, en ‘querystring’ tenemos: “401;http://servidor.com/lapaginasolicitada”
if (queryString.IndexOf(‘;’) != -1)
{
path = queryString.Split(‘;’)[1];
path = path.Replace(webHttp, “”);HttpContext.Current.RewritePath(path);
}
}
Este mecanismo tiene una importante pega. La barra de direcciones es cambiada por el link original, es decir, se puede acceder con http://miportal.com/titulo, pero en la barra de direcciones, aparecerá http://miportal.com/pagina.aspx?id=34
Quizá este matando moscas a cañonazos, pero si conoces alguna forma mejor, será bienvenida (no me vale poner un default.aspx en una carpeta
9 Noviembre 2008 a 11:06 AM
Muy bien el post, un buen complemento ao mio de URL Semanticas
http://geeks.ms/blogs/dnudelman/archive/2008/10/31/url-sem-225-nticas.aspx
10 Diciembre 2008 a 9:54 PM
Yo encontre una parecida pero que respeta la URL de navegador, es lo mismo en el global asa, pero en lugar de Reescribir el path, lazamos un httpWebRequest a la página, y hacemos un response.write:
Algo así.
Dim req As HttpWebRequest = CType(WebRequest.Create(newurl), HttpWebRequest)
Dim sr As New StreamReader(req.GetResponse().GetResponseStream())
Dim results As String = sr.ReadToEnd()
sr.Close()
Dim html As String
HttpContext.Current.Response.Write(html)
HttpContext.Current.Response.End()
22 Octubre 2009 a 7:04 AM
Hola genail, tengo una consulta yo estoy haciendo una pagina Gigantografias http://www.remiserostudio.com/gigantografias.html y quiero convertirla a http://www.remiserostudio.com/gigantografias sin el html, dime como podria convertir esto.
22 Octubre 2009 a 8:42 AM
Lo mejor, si tienes acceso al servidor donde esta alojada la página, o tu proveedore de internet te lo permite, es que uses soliciones de este tipo: http://msdn.microsoft.com/en-us/library/ms972974.aspx
En caso contrario, puedes utilizar la forma que comento en el blog, pero que no es nada elegante.
Nota: Estas soluciones son aplicables a productos de microsoft (asp.net e IIS).
Saludos.