ASP.NET: Einfaches URL-Rewriting via global.aspx

Über Application_BeginRequest in der global.asax können alle URL-Anfragen abgefangen und umgeformt werden. So kann man „schöne“ bzw. lesbare URLs erzeugen. Also etwa statt domain.de/sportnews.aspx?id=12345 dann z.B. domain.de/usain-bolt-ist-der-schnellste.aspx.

Wie man nun die Verbindung zur ID herstellt ist ein anderes Thema. So könnte auch gleich die ID mitgeführt werden (usain-bolt-ist-der-schnellste-12345.aspx). Die Zahlen nach dem letzten Bindestrich sind also immer die ID. Oder man hat die URL mit der ID in einer DB-Tabelle und muss nur schnell die ID zur URL raussuchen.

global.asax

<@ Application Language="C#">
<script runat="server">
protected void Application_BeginRequest(object sender, EventArgs e)
{
  // Dateinamen lesen...
  string url = Request.Url.Segments[Request.Url.Segments.Length - 1];
  int id;

  // ... ID ermittlen, (hier ein Hard-Coding-Test) ...
  if (url == "usain-bolt-ist-der-schnellste") id = 12345;

  // ...und interne URL aufrufen
  Context.RewritePath(String.Format("sportnews.aspx?id={0}", id));

}
</script>

Mehr Infos:
URL Rewriting mit ASP.NET
Wie optimiere ich meine ASP.NET-Webseiten für Suchmaschinen?
Sinnvolle Verwendung der global.asax

Redirects per 404-Handler

Ein anderer Weg, der vor allem auch für nicht aspx-Ressourcen funktioniert, geht über einen 404-Handler. Dann könnte die URL so aussehen: domain.de/news/sport/usain-bolt-ist-der-schnellste oder auch domain.de/newid/12345 – wie also eine Verzeichnisstruktur.

Mehr Infos:
Creating your own URL Shrinker using ASP.Net

URL-Remapping per web.config

Hat man eine überschaubare Anzahl von Seiten die umgeleitet werden sollen, kann dies „hardcoded“ auch direkt in der web.config erfolgen:

<urlMappings enabled="true">
  <add url="~/sports.aspx" mappedUrl="~/news.aspx?category=sports" />
  <add url="~/world.aspx" mappedUrl="~/news.aspx?category=world" />
</urlMappings>