{"id":162,"date":"2007-12-06T16:57:43","date_gmt":"2007-12-06T15:57:43","guid":{"rendered":"http:\/\/unckel.com\/blog\/?p=162"},"modified":"2019-12-07T22:22:36","modified_gmt":"2019-12-07T21:22:36","slug":"asp-net-einfaches-url-rewriting-via-global-aspx","status":"publish","type":"post","link":"https:\/\/unckel.de\/blog\/asp-net-einfaches-url-rewriting-via-global-aspx\/","title":{"rendered":"ASP.NET: Einfaches URL-Rewriting via global.aspx"},"content":{"rendered":"<p>\u00dcber\u00a0<a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ee255086(BTS.10).aspx\" target=\"_blank\" rel=\"noopener\">Application_BeginRequest<\/a>\u00a0in der\u00a0<a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/1xaas8a2(VS.71).aspx\" target=\"_blank\" rel=\"noopener\">global.asax<\/a>\u00a0k\u00f6nnen alle URL-Anfragen abgefangen und umgeformt werden. So kann man &#8222;sch\u00f6ne&#8220; bzw. lesbare URLs erzeugen. Also etwa statt domain.de\/sportnews.aspx?id=12345 dann z.B. domain.de\/usain-bolt-ist-der-schnellste.aspx.<\/p>\n<p>Wie man nun die Verbindung zur ID herstellt ist ein anderes Thema. So k\u00f6nnte auch gleich die ID mitgef\u00fchrt 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.<\/p>\n<p><strong>global.asax<\/strong><\/p>\n<pre>&lt;@ Application Language=\"C#\"&gt;\n&lt;script runat=\"server\"&gt;\nprotected void Application_BeginRequest(object sender, EventArgs e)\n{\n  \/\/ Dateinamen lesen...\n  string url = Request.Url.Segments[Request.Url.Segments.Length - 1];\n  int id;\n\n  \/\/ ... ID ermittlen, (hier ein Hard-Coding-Test) ...\n  if (url == \"usain-bolt-ist-der-schnellste\") id = 12345;\n\n  \/\/ ...und interne URL aufrufen\n  Context.RewritePath(String.Format(\"sportnews.aspx?id={0}\", id));\n\n}\n&lt;\/script&gt;<\/pre>\n<p>Mehr Infos:<br \/>\n<a href=\"http:\/\/msdn.microsoft.com\/de-de\/library\/ms972974.aspx\" target=\"_blank\" rel=\"noopener\">URL Rewriting mit ASP.NET<\/a><br \/>\n<a href=\"http:\/\/www.microsoft.com\/germany\/msdn\/solve\/knowhow\/howto\/webentwicklung\/WieOptimiereIchMeineASPNETWebseitenFuerSuchmaschinen.mspx\" target=\"_blank\" rel=\"noopener\">Wie optimiere ich meine ASP.NET-Webseiten f\u00fcr Suchmaschinen?<\/a><br \/>\n<a href=\"http:\/\/msdn.microsoft.com\/de-de\/library\/bb979330.aspx\" target=\"_blank\" rel=\"noopener\">Sinnvolle Verwendung der global.asax<\/a><\/p>\n<p><strong>Redirects per 404-Handler<\/strong><\/p>\n<p>Ein anderer Weg, der vor allem auch f\u00fcr nicht aspx-Ressourcen funktioniert, geht \u00fcber einen 404-Handler. Dann k\u00f6nnte die URL so aussehen: domain.de\/news\/sport\/usain-bolt-ist-der-schnellste oder auch domain.de\/newid\/12345 &#8211; wie also eine Verzeichnisstruktur.<\/p>\n<p>Mehr Infos:<br \/>\n<a href=\"http:\/\/blogs.msdn.com\/kgrey\/articles\/URLShrinker.aspx\" target=\"_blank\" rel=\"noopener\">Creating your own URL Shrinker using ASP.Net<\/a><\/p>\n<p><strong>URL-Remapping per web.config<\/strong><\/p>\n<p>Hat man eine \u00fcberschaubare Anzahl von Seiten die umgeleitet werden sollen, kann dies &#8222;hardcoded&#8220; auch direkt in der web.config erfolgen:<\/p>\n<pre>&lt;urlMappings enabled=\"true\"&gt;\n  &lt;add url=\"~\/sports.aspx\" mappedUrl=\"~\/news.aspx?category=sports\" \/&gt;\n  &lt;add url=\"~\/world.aspx\" mappedUrl=\"~\/news.aspx?category=world\" \/&gt;\n&lt;\/urlMappings&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u00dcber\u00a0Application_BeginRequest\u00a0in der\u00a0global.asax\u00a0k\u00f6nnen alle URL-Anfragen abgefangen und umgeformt werden. So kann man &#8222;sch\u00f6ne&#8220; 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\u00f6nnte auch gleich die ID mitgef\u00fchrt werden (usain-bolt-ist-der-schnellste-12345.aspx). Die Zahlen nach dem letzten Bindestrich sind also immer die ID. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71],"tags":[],"class_list":["post-162","post","type-post","status-publish","format-standard","hentry","category-webdesign"],"_links":{"self":[{"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/posts\/162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/comments?post=162"}],"version-history":[{"count":1,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/posts\/162\/revisions"}],"predecessor-version":[{"id":824,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/posts\/162\/revisions\/824"}],"wp:attachment":[{"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/media?parent=162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/categories?post=162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/tags?post=162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}