web-dev-qa-db-fra.com

Supprimer HTML ou ASPX Extension

Dans un environnement IIS7 hébergé, je recherche le moyen le plus simple d'utiliser des noms de fichier sans extension. J'ai simplement les pages suivantes:

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

Je n'ai qu'une poignée de pages, je n'ai pas de code dynamique, rien de spécial. Tous les exemples que j’ai trouvés ou les méthodes que j’utilise dans les autres sites que j’ai développés tournent autour de contenu dynamique, de pages, etc. Je cherche simplement la solution la plus simple, idéalement ne nécessitant aucun type de module de réécriture d’URL. De préférence, je pourrais conserver l'extension .html au lieu de convertir le site en projet ASP.NET, mais c'est une option.

Merci.

33
roadsunknown

J'ai fini par utiliser les sites suivants:

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

et

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

ou fondamentalement le code suivant dans mon fichier web.config utilisant le module de réécriture d'URL IIS7 que la plupart des sites hébergés proposent désormais (dans ce cas, j'utilise 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>
47
roadsunknown

Une autre méthode un peu plus moderne consiste à utiliser Microsoft.AspNet.FriendlyUrls. Dans le fichier Global.asax.cs, ajoutez:

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

et dans le fichier RouteConfig

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

Une autre solution simple pour atteindre le même objectif:

Placez les lignes de code suivantes dans votre fichier 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");
   }
}
6
Pawan Maheshwari

Si vous avez du code dynamique, je pense que la solution la plus simple consiste à renommer les fichiers .aspx en .html, en particulier si vous ne disposez que de quelques pages. Il n'y a pas de moyen simple de le faire sans réécrire l'URL d'une manière ou d'une autre.

Cependant, avec IIS 7, vous pouvez le configurer très facilement avec un module HTTP. Scott Guthrie explique cela très bien. Dans ce billet, il montre plusieurs approches pour personnaliser les URL. Je pense que vous voudriez aborder le # 3 le meilleur.

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

1
dontangg

Je n'ai pas assez de points à commenter, et cela améliore la réponse de Pawan M. Sa volonté fonctionnera, sauf si des chaînes de requête sont utilisées sur la page. J'ai modifié le code de Pawan pour permettre les chaînes de requête, sans parler de la version vb.

Vérifiez que votre projet contient un fichier Global.asax.vb. Si ce n'est pas le cas, ajoutez un élément en procédant ainsi:

Fichier -> Nouveau -> Fichier -> Classe d'application globale

Dans le fichier Global.asax de votre projet, ajoutez cette fonction:

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
sec0ndHand

Vous pouvez le faire en c # pour utiliser une extension personnalisée dans votre URL dans ASP.NET.

Laissez ".recon" dans le code être votre extension personnalisée. (c'est-à-dire remplacer ".recon" par votre propre extension)

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");
        }
 }
0
king zecole