2010-12-19 62 views
29

En un entorno alojado de IIS7, estoy buscando la forma más sencilla de usar nombres de archivo sin extensión. Simplemente tengo las siguientes páginas:Eliminar HTML o Extensión ASPX

index.html (o .aspx) -> domain.com gallery.html -> domain.com/gallery videos.html -> domain.com/videos etc ...

Solo tengo un puñado de páginas, no tengo un código dinámico, nada especial. Todos los ejemplos que he encontrado o los métodos que uso en otros sitios que he desarrollado giran en torno a contenido dinámico, páginas, etc. Simplemente estoy buscando la solución más simple, que idealmente no requiere ningún tipo de módulo de reescritura de URL instalado. Preferiblemente, podría conservar la extensión .html en lugar de convertir el sitio a un proyecto ASP.NET, pero esa es una opción.

Gracias.

+0

se refieren a esta respuesta Funciona bien [Quitar .aspx formar todas las páginas] [1] [1]: http: //stackoverflow.com/a/15240694/1265997 – cwishva

+0

visite este enlace http://stackoverflow.com/questions/2170745/what-are-pros-to-use-extension-less-url –

Respuesta

45

Terminé usando los siguientes sitios:

http://blogs.msdn.com/b/carlosag/archive/2008/09/02/iis7urlrewriteseo.aspx

y

http://forums.iis.net/t/1162450.aspx

o básicamente el siguiente código en mi archivo web.config utilizando el IIS7 Módulo de reescritura de URL que la mayoría de los sitios alojados ofrecen ahora (en este caso estoy usando g GoDaddy):

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="RewriteASPX"> 
       <match url="(.*)" /> 
       <conditions logicalGrouping="MatchAll"> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
       </conditions> 
       <action type="Rewrite" url="{R:1}.aspx" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 
+12

Gracias por esta excelente solución. Solo para aclarar, el XML anterior va dentro del elemento de web.config. –

+0

acabo de salvar mi vida +1 –

1

Si tiene un código dinámico, creo que lo más fácil es cambiar el nombre de los archivos de .aspx a .html, especialmente si solo tiene un puñado de páginas. No hay una manera simple de hacerlo sin volver a escribir la URL de alguna manera.

Sin embargo, con IIS 7, puede configurarlo fácilmente con un Módulo HTTP. Scott Guthrie lo explica muy bien. En esta publicación, muestra varios enfoques para personalizar las URL. Creo que te gustaría acercarte al # 3 de la mejor manera.

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

+0

Gracias, pero la idea es para deshacerse de las extensiones por completo No los cambie de nombre desde HTML> ASPX o viceversa. La publicación de ScottGu está un poco desactualizada, pero tiene algunos datos útiles, aunque más complejos que lo que estoy buscando. – roadsunknown

+0

La información proporcionada en ese enlace le indica cómo quitar la extensión si mira el método 3. Las instrucciones allí describen el proceso _actual_ para eliminar extensiones con IIS7 aunque fue escrito en 2007. – dontangg

5

Otra solución más sencilla para lograr el mismo:

Put siguientes líneas de código en su archivo de global.ascx:

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    String fullOrigionalpath = Request.Url.ToString(); 
    String[] sElements = fullOrigionalpath.Split('/'); 
    String[] sFilePath = sElements[sElements.Length - 1].Split('.'); 

    if (!fullOrigionalpath.Contains(".aspx") && sFilePath.Length == 1) 
    { 
     if (!string.IsNullOrEmpty(sFilePath[0].Trim())) 
      Context.RewritePath(sFilePath[0] + ".aspx"); 
    } 
} 
+0

pawan he añadido el código ur pero todavía veo el nombre de la página con la extensión en la url, –

+0

Debería funcionar, lo he usado en algunos de mis proyectos. Vuelva a verificar si falta algo más. –

+0

Este código no está haciendo lo que usted dijo. –

0

no tengo suficientes puntos para comenten, y esto está mejorando la respuesta de Pawan M. Su voluntad funcionará, a menos que tenga Query Strings en la página. He modificado el código de Pawan para permitir cadenas de consulta, sin mencionar que la mía es la versión vb.

Asegúrate de que tu proyecto tenga un archivo Global.asax.vb. Si no se agrega un elemento al hacer esto:

Archivo -> Nuevo -> Archivo -> Clase de aplicaciones globales

En el archivo Global.asax de su proyecto de añadir esta función:

Sub Application_BeginRequest(sender As Object, e As EventArgs) 
    Dim fullOrigionalpath As [String] = Request.Url.ToString() 
    Dim sElements As [String]() = fullOrigionalpath.Split("/"c) 
    Dim sFilePath As [String]() = sElements(sElements.Length - 1).Split("."c) 
    Dim queryString As [String]() = sElements(sElements.Length - 1).Split("?"c) 

    If Not fullOrigionalpath.Contains(".aspx") AndAlso sFilePath.Length = 1 Then 
     If Not String.IsNullOrEmpty(sFilePath(0).Trim()) Then 
      If queryString.Length = 1 Then 
       Context.RewritePath(sFilePath(0) + ".aspx") 
      Else 
       Context.RewritePath(queryString(0) + ".aspx?" + queryString(1)) 
      End If 

     End If 
    End If 
End Sub 
+0

Gracias Artjom B., la respuesta ahora refleja su sugerencia. - Gracias – sec0ndHand

3

Otra forma un poco más moderna de hacer esto es usar Microsoft.AspNet.FriendlyUrls. En Global.asax.cs añadir:

void Application_Start(object sender, EventArgs e) 
{ 
    // Code that runs on application startup 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 

y en el archivo RouteConfig

public static class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     var settings = new FriendlyUrlSettings(); 
     settings.AutoRedirectMode = RedirectMode.Permanent; 
     routes.EnableFriendlyUrls(settings); 
    } 
0

Usted puede hacer esto en C# para utilizar una extensión personalizada en su URL en ASP.NET.

Deje que ".recon" en el código sea su extensión personalizada. (Es decir, reemplazar ".recon" a su propia extensión)

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
     HttpApplication app = sender as HttpApplication; 
     if (app.Request.Path.ToLower().IndexOf(".recon") > 0) 
     { 
      string rawpath = app.Request.Path; 
      string path = rawpath.Substring(0, rawpath.IndexOf(".recon")); 
      app.Context.RewritePath(path+".aspx"); 
     } 
} 
Cuestiones relacionadas