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://&#8221; + HttpContext.Current.Request.ServerVariables[“SERVER_NAME”];

            // cuando ocurre un error 401, en ‘querystring’ tenemos: “401;http://servidor.com/lapaginasolicitada&#8221;
            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 🙂

Anuncios

6 comentarios to “Páginas sin extensión en servidores compartidos”

  1. 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()

  2. 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.

  3. […] Febrer (FebrerSoftware.com) Tecnología, programación, microsoft y sus productos. « Páginas sin extensión en servidores compartidos Visifire 2.0 – ya funciona con WPF!!! […]

  4. si pude convertir una url gigantografias.html en esta de aca,

    http://www.remiserostudio.com/gigantografias

    pero que pasa si pongo .com/eng/gigantografias para enlazar a el idioma ingles, y otra cosa yo tenia una pagina de error 404 que funcionaba y ahora que puse eso no funciona.

    Options +FollowSymlinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ /$1.php [L,QSA]

    redirectMatch 301 /gigantografias.html http://www.remiserostudio.com/gigantografias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: