DevTrain Startseite Visual Studio 1 Magazin  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Hannes Preishuber Artikel Drucken
        
Vorspieglung falscher Tatsachen: Querystring wird URL

Suchmaschinenbetreiber scheinen es als Herausforderung zu betrachen, Entwickler von Websites  mit Missachtung zu strafen. Speziell dynamische Websiten mit Cookies und Querystrings werden oftmals von den Crawlern einfach ignoriert.
So kann Google laut Doku zwar eine Seite mit Querystring in der URL indizieren, in der Praxis findet sich so eine Seite aber nie wieder in der Search Engine.

www.devtrain.de/news.asp?artnr=523

Mit einem ISAPI Filter lässt sich aber obiger Querstring in eine einfache URL mappen z.B. in der Form

www.devtrain.de/artikel/artnr/523/news.aspx

Wir haben selbiges in einem vorhergehenden Artikel bereits besprochen und die nötige ISAPI.DLL kostenfrei zur Verfügung gestellt.

In ASP .NET lässt sich dieses Problem mit einem HTTPModule lösen. Die grundlegende Funktionsweise wurde ebenfalls bereits in einem vorigen Beitrag beschrieben.

Sie müssen den Namespace System.Web importieren um die Klassen nutzen zu können.
In der Init Funktion der Klasse legen Sie einen Funktionszeiger auf die Startfunktion. In dieser können Sie dann per ReWritePath die Seite umleiten.
Was dann folgt ist eine mehr oder weniger elegante String Operation. Mir gefällt die Methode mit dem Split Befehl ganz gut, weil man damit sehr wenige Zeilen tippen muss. Am Schluss setzen Sie einen String zusammen der auf die Seite zeigt die den eigentlichen Job tun soll.
Die Umleitung des Requests erfolgt über die Funktion RewritePath.

Public Class URLMapper1
    Implements IHttpModule

    Public Sub Init(ByVal app As HttpApplication) Implements IHttpModule.Init
        AddHandler app.BeginRequest, AddressOf BeginRequest
        AddHandler app.EndRequest, AddressOf EndRequest
    End Sub

    Public Sub Dispose() Implements IHttpModule.Dispose

    End Sub

    Public Sub BeginRequest(ByVal s As Object, ByVal e As EventArgs)
        Dim app As HttpApplication
        app = CType(s, HttpApplication)
        Dim strURL As String = app.Request.Url.ToString.ToLower
        If InStr(strURL, "artikel") > 0 Then
            'wwww.devtrain.de/artikel/artnr/523/news
            Dim strCutURL As String = strURL.Substring(String.Compare(strURL, "artikel"))
            Dim arrPars As String() = strURL.Split("/")
            app.Context.RewritePath("/webui/news.aspx?" & arrPars(5) & "=" & arrPars(6))
        End If
    End Sub

    Public Sub EndRequest(ByVal s As Object, ByVal e As EventArgs)
    End Sub

End Class


Die Funktion Dispose kann man hier leer lassen ebesno wie Endrequest.

Am Schluss müssen Sie das Modul noch über die Datei web.config registrieren.
<httpModules>
 <add type="WebUI.URLMapper1,WebUI" name="URLMapper1" />
</httpModules>

Diese Methode bietet eine komfortable alternative zur statischen HTML Seite. Dank Caching ist die Performance ähnlich wie bei puren HTML.


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine Links vorhanden

  Erfasst am: 13.03.2002
  Gültig bis: 12.04.2002
15 Ratings
Bewertung: 88,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG