Kanonische URLs bieten zahlreiche Vorteile, insbesondere können sie sich positiv auf die Plazierung in Suchmaschinen auswirken. In ASP.NET kann man ein HTTP-Modul verwenden, um sicherzustellen, daß Anfragen an einen Webserver ggf. auf die kanonische URL umgeleitet werden.
Dieses HTTP-Modul stellt die Kanonizität einer Anfrage durch folgende Überprüfungen sicher:
http://www.schneegans.de/ und
https://schneegans.de/ sind nicht äquivalent. Es erfolgt eine Umleitung auf den kanonischen Hostnamen. Diese Überprüfung wird durch das
canonicalHost
-Element in der
web.config
gesteuert; mit
check="true"
wird sie aktiviert, der kanonische Hostname wird im
hostName
-Attribut angegeben:
<canonicalHost check="true" hostName="schneegans.de" />
IIS unterscheidet anders als Apache im Pfad einer Anfrage nicht zwischen Groß- und Kleinschreibung. https://schneegans.de/FrontPage/ und https://schneegans.de/frontpage/ sind aber keine äquivalenten URLs. Das Modul sorgt deshalb für eine Umleitung auf einen komplett kleingeschriebenen Pfad. Es ist gegenwärtig nicht möglich, bspw. https://schneegans.de/FrontPage/ oder https://schneegans.de/Frontpage/ als kanonische URL zu definieren.
Diese Überprüfung wird durch das
lowerPath
-Element aktiviert:
<lowerPath check="true" />
Die meisten Webserver ignorieren unbekannte Querystring-Parameter völlig. Das ist allerdings ungünstig, denn
https://schneegans.de/ und
https://schneegans.de/?foo sind für Browser und Proxies zwei völlig verschiedene Ressourcen. Das Modul kann deshalb mit
404 Not Found
antworten, wenn eine Anfrage einen unbekannten Parameter enthält.
Diese Überprüfung wird durch das
querystring
-Element gesteuert. Erlaubte Parameter werden durch ein
add
-Element hinzugefügt:
<querystring check="true">
<add key="url" />
<add key="schema" />
</querystring>
Es läßt sich nicht prüfen, ob das Standard-Dokument in einem Verzeichnis über
/
oder über
/Default.aspx
angefordert wurde. Diese Prüfung kann unter IIS nur ein ISAPI-Filter vornehmen.
Laden Sie das
kompilierte Modul herunter und entpacken Sie die Dateien im
\bin
-Verzeichnis Ihrer Web-Applikation. In der
web.config
können das Modul konfigurieren:
<?xml version="1.0" ?>
<configuration>
<configSections>
<section name="canonicalUrl" type="Schneegans.Web.CanonicalUrlSectionHandler,
CanonicalUrl" allowLocation="true" allowDefinition="Everywhere" />
</configSections>
…
<canonicalUrl>
<canonicalHost check="true" hostName="localhost" />
<lowerPath check="true" />
<querystring check="true" />
</canonicalUrl>
<location path="trace.axd">
<canonicalUrl>
<lowerPath check="false" />
<querystring check="false" />
</canonicalUrl>
</location>
<location path="sv">
<canonicalUrl>
<querystring check="true">
<add key="url" />
<add key="schema" />
</querystring>
</canonicalUrl>
</location>
</configuration>
Ebenso ist eine Konfiguration in Unterverzeichnissen möglich. Die Einstellungen werden dabei vererbt, Querystring-Parameter müssen Sie aber jeweils neu definieren.
Aktiviert wird das Modul wie gewohnt im
<httpModules/>
-Abschnitt der
web.config
oder
notfalls in der
Global.asax.vb
:
Private Sub Global_BeginRequest(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.BeginRequest
Dim HttpModule As New Schneegans.Web.CanonicalUrl
HttpModule.Init(DirectCast(sender, HttpApplication))
HttpModule.OnBeginRequest(sender, e)
End Sub