Ü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>