it-swarm.com.de

Entfernen Sie die HTML- oder ASPX-Erweiterung

In einer gehosteten IIS7-Umgebung suche ich nach der einfachsten Möglichkeit, Dateinamen ohne Erweiterung zu verwenden. Ich habe einfach folgende Seiten:

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

Ich habe nur eine Handvoll Seiten, ich habe keinen dynamischen Code, nichts Besonderes. Alle Beispiele, die ich gefunden habe, oder Methoden, die ich auf anderen von mir entwickelten Websites verwendet habe, drehen sich um dynamische Inhalte, Seiten usw. Ich suche einfach nach der einfachsten Lösung, die im Idealfall keinerlei Url-Rewrite-Modul benötigt. Vorzugsweise kann ich die Erweiterung .html beibehalten, anstatt die Site in ein ASP.NET-Projekt zu konvertieren. Dies ist jedoch eine Option.

Vielen Dank.

33
roadsunknown

Am Ende habe ich folgende Seiten benutzt:

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

und

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

oder im Wesentlichen der folgende Code in meiner Datei web.config, der das IIS7 URL Rewrite Module verwendet, das die meisten gehosteten Sites jetzt anbieten (in diesem Fall verwende ich 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

Eine etwas modernere Methode ist die Verwendung von Microsoft.AspNet.FriendlyUrls. In Global.asax.cs hinzufügen:

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

und in der RouteConfig-Datei

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

Eine andere einfachste Lösung, um dasselbe zu erreichen:

Fügen Sie folgende Codezeilen in Ihre global.ascx-Datei ein:

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

Wenn Sie über dynamischen Code verfügen, denke ich, dass es am einfachsten ist, die Dateien einfach von .aspx in .html umzubenennen, insbesondere wenn Sie nur eine Handvoll Seiten haben. Es gibt keinen einfachen Weg, dies zu tun, ohne die URL irgendwie neu zu schreiben.

Mit IIS 7 können Sie es jedoch ganz einfach mit einem HTTP-Modul einrichten. Scott Guthrie erklärt das sehr gut. In diesem Beitrag zeigt er verschiedene Ansätze zum Anpassen der URLs. Ich denke, Sie möchten Nr. 3 am besten erreichen.

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

1
dontangg

Ich habe nicht genug Punkte zum Kommentieren, und dies verbessert die Antwort von Pawan M. Sein wird funktionieren, es sei denn, Sie haben Query Strings, die auf der Seite verwendet werden. Ich habe den Code von Pawan geändert, um Abfragezeichenfolgen zuzulassen. Ganz zu schweigen davon ist die Vb-Version.

Stellen Sie sicher, dass sich in Ihrem Projekt eine Global.asax.vb-Datei befindet. Wenn dies nicht der Fall ist, fügen Sie kein Element hinzu:

Datei -> Neu -> Datei -> Globale Anwendungsklasse

Fügen Sie in der Global.asax-Datei Ihres Projekts diese Funktion hinzu:

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

Sie können dies in c # tun, um eine angepasste Erweiterung in Ihrer URL in ASP.NET zu verwenden.

Lassen Sie ".recon" im Code Ihre benutzerdefinierte Erweiterung sein. (Ersetzen Sie ".recon" durch Ihre eigene Erweiterung)

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