Hade fått tillgång till en ftp-server med en väldigt massa filer på från många år tillbaka som är indexerade av google. En herrans röra kan man säga.
Tanken är att vi ska utveckla en ny sajt och under tiden så ville jag att inga av de gamla filerna skulle gå att nå. Servern är av typen Apache som jag inte är så van att arbeta med. Så efter ett intensivt googlande och testande så tror jag att jag fått till en bra redirect-regel.
Denna redirectar endast html och php-filer och fungerar på mappar. Alla anrop på nämnda dokumenttyper skickas till rootmappen.
Har på många tidigare projekt använt Id-nummer i url:erna för att IIS och .NET haft så dåligt stöd för att skapa användarvänliga url:er. Gör nu om en del gamla sidor till ASP.NET MVC och lägger över dem till IIS 7-servrar som har bättre stöd för url-omskrivning.
Brukar lägga till ett speciellt databas-fält för att spara den sista delen av url:en som ska vara till för att identifiera blogginlägget, produkten, kategorien eller vad det nu handlar om och basera denna på den äldre titeln. Använder det uttryck som även Wordpress använder för att beskriva ett sånt fält, "Slug".
Här är ett skript som jag precis körde på en sådan databas. Detta byter ut de tecken jag inte vill ha i url:erna mot ett vanligt bindestreck, gör om allt till gemener och byter ut å,ä,ö mot a,a,o.
UPDATE BlogPost SET Slug=Lower(Title);
UPDATE BlogPost SET Slug=REPLACE(Slug,'å','a');
UPDATE BlogPost SET Slug=REPLACE(Slug,'ä','a');
UPDATE BlogPost SET Slug=REPLACE(Slug,'ö','o');
UPDATE BlogPost SET Slug=REPLACE(Slug,' ','-');
UPDATE BlogPost SET Slug=REPLACE(Slug,'&','-');
UPDATE BlogPost SET Slug=REPLACE(Slug,'/','-');
UPDATE BlogPost SET Slug=REPLACE(Slug,'-','-');
UPDATE BlogPost SET Slug=REPLACE(Slug,'.','-');
UPDATE BlogPost SET Slug=REPLACE(Slug,',','-');
UPDATE BlogPost SET Slug=REPLACE(Slug,'_','-');
Skrev en beskrivning om hur man gör ISAPI Rewrite 3 på Bineros servrar och tyvärr innehåll denna några fel. Så om någon har provat beskrivningen utan lycka så kan jag rekommendera att kolla in ändringarna på den länken och så kommer det nog gå mycket bättre.
ISAPI-reglerna ska bland annat ligga i en fil vid namnet .htaccess och inte httpd.ini som jag skrev först.
Vi har börjat testa lite smått på några webbsajter att använda ISAPI-modulen som finns installerad hos Binero och det fungerar ganska bra. Vi har till och med fått igång ett första MVC-projekt på .NET 3.5. Riktigt kul med ett webbhotell som är framåt och förstår vilken teknik vi utvecklare vill ha.
Det tog lite tid att lista ut hur man fick igång det eftersom Bineros förklaring av Rewrite 3 inte är så utförlig. De har manualen på deras sajt så där kan man lära sig lite (funkar dock inte med Firefox 3). Helicon Tech som ligger bakom modulen rekommenderas också.
Mest hjälp för att få igång det hade jag av av några trådar på Aspsidan och webForum.
Något att tänka på är att de ändringar man gör i Script Mappings i Bineros kontrollpanel tar ett tag innan de slår igenom. Kommer ihåg den första kvällen då jag kämpade med det in på småtimmarna men hade ingen lycka. Provade mängder av olika konfigurationer och gav sist upp och bara lämnade det. Nästa morgon när jag laddade upp sidan så bara det fungerade!
Så nu ska jag förklara det jag kommit på hittills.
Det första man måste göra är att lägga till en *-mappning enligt följande.
Filetype: * Executable: Aspnet2 is wildcard: false is script engine: false verify that file exists: false
När du ändå är där kan du även lägga till .asax eftersom Binero verkar ha glömt det i standardinställningen. Se bilden för exempel på de två inställningarna längst ner.
Sen är det dags att knåpa ihop en httpd.ini (uppdatering: filen ska ha namnet .htaccess och inget annat) som styr hur ISAPI Rewrite 3 ska uppföra sig. Här under ser ni våran som fungerar fint om man vill ta bort .aspx ändelserna. Jag har dock inte lyckats att exkludera vissa mappar, så om någon kan se vad det är för fel på sista raden som ska blocka mappen "MappSomInteSkaOmskrivas" så uppskattar jag tips. Uppdatering: Denna rad måste ju givetvis ligga överst för att de andra reglerna ska ignoreras. Har nu uppdaterat skriptet som det ska se ut och då funkar det mycket bättre.
# Helicon ISAPI_Rewrite configuration file # Version 3.1.0.34
Vi har pratat mycket om användarvänliga url:er här på bloggen. Ni som har hängt med på ämnet vet att Microsofts ASP.NET-teknik inte är så optimal för att göra användarvänliga länkar.
Scott Guthrie som är utvecklingschef på Microsoft gör sitt bästa för att hålla modet uppe för alla url-designande freaks där ute. Vi har väntat länge på en lösning och nu kommer den snart i form av Longhorn Server och IIS 7.0.
Scott gjorde i måndags en genomgång av nya finesser i webbservern IIS 7.0 och visar även ett diagram hur processmodellen skiljer sig från den tidigare IIS 6.0. Samtidigt klargörs ytterligare en gång att IIS 7 inte kommer att finnas tillgänglig på Windows 2003.
Så det är väl bara att vänta på det nya serveroperativet då och alla de förbättringar som det kommer att ge.
Det som är bra är att man i alla fall får ordentligt med tid på att tänka igenom exakt hur man vill ha sina url:er när möjligheten finns att förbättra dem. Jag har tidigare spånat lite på hur jag vill ha urler:na till denna bloggen i kommentarerna till en tidigare tråd på ämnet.
Som ett exempel har just detta inlägget du läser just nu adressen:
http://codeodyssey.se/blog.aspx_id=270
Det säger ingenting om innehållet av artikeln för en besökare och det är det jag vill förbättra i första hand. Istället tycker jag att detta skulle vara en snyggare och mer tillgänglig adress.
Jag har fortfarande inte bestämt mig helt hur jag ska hantera alla specialtecken som inte stödjs i url:formatet. En som har funderat mer på dessa är Scott Hanselman och han bjuder idag på riktigt intressant läsning i sin artikel "Are Blog URLs important". Scotts blogg har rätt sjyssta url:er men dras fortfarande dras med .ASPX-ändelsen.
Det finns ju några genvägar mot snyggare adresser men vi känner att det bästa skulle vara att vänta tills IIS 7.0 kommer och man kan få till adresserna precis som man vill ha dem med en gång.Adresserna bör ju aldrig ändras så att göra några halvmessyer känns inte aktuellt.
Men för er som länkar till oss kan vara lugna. De url:er vi har just nu, kommer fortsätta att fungerar, även när vi lanserar de mer besökarvänliga varianterna. Trasiga länkar är inget kul.
Som ni vet väntar vi ivrigt på att IIS7 ska kunna gå att använda i produktions miljö. Där kommer det finns bättre stöd för att "skriva om" urler. De nuvarande alternativen är inte så vidare bra och saknaden av en standardiserad modell är jobbig.
Scott Guthrie ger oss dock några bra knep. En genomgång av de ISAPI-filter finns tillgängliga för IIS6. Även andra trix, bland annat Request.PathInfo som jag inte använt tidigare. Då kan man göra urler som ser ut så här.
Ändelsen ".aspx" är helt onödig och den tillför absolut ingenting för besökarens upplevelse. Okej vi som är utvecklare får snabbt reda på vilken teknik som körs, men hur väsentligt är det?
Ett snyggare och mer lättillgängligt variant skulle vara som i nästa exempel.
Men för att ange en sådan struktur måste man alltså använda ett ASAPI ISAPI-filter. Och det är inte alla webbhotell som erbjuder. Man kan ju givetvis skapa fysiska mappar och lägga en Default.aspx fil i varje. Men det orkar man inte..
Jag älskar att utveckla i Asp.Net C# och kommer definitivt fortsätta att satsa på denna teknik. Men allt kan ju inte vara perfekt. Den största bristen i ramverket är enligt mig att det inte finns något inbyggt stöd för URL-omskrivning. Har skrivit lite om det tidigare.
Det är framför allt i IIS 6 som bristerna finns. I den nyare IIS 7 som kommer lanseras med Longhorn server kommer det finnas bättre möjligheter till att lägga in regler för URL-omskrivning. Det är ju dock en tag kvar tills det nya operativsystemet finns på marknaden så det hjälper oss inte just nu.
Det man kan göra i dagsläget är att använda ASAPI-filter men då förutsätts att du har en egen dedikerad server eller ligger på ett webbhotell som vill installera det åt dig. Jeff Atwood på Coding Horror skriver mer om de två vanligaste ASAPI-lösningarna för IIS.
En av de främsta kritikerna av situationen är nog Mike Schinkel. Detta är killen som ligger bakom initiativet wiki.welldesignedurls.org och den medföljande bloggen där man kan läsa mycket intressant på ämnet.
På sin personliga blogg sparar inte Mike på krutet. I en post nyligen med rubriken "IIS 7.0: Too Little, Too Late?" hoppar även en annan Mike (Program Manager för Microsofts IIS team) in i diskussionen och beklagar situationen.
Den första Mike fortätter i ett annat inlägg att lista upp alla alternativa server-tekniker och frågar sina läsare vilken han ska börja använda istället för Asp.Net. Han verkar ha tröttnat och det är lite tråkigt tycker jag.
Men bra att många uppmärksammar problemet. Microsoft har dock meddelat att IIS 7 kommer inte finnas tillgänglig för Windows 2003 och det är riktigt synd. De nya teknikerna är för djupt förankrade i Longhorns nya ramverk, menar man.
Men vem vet, efter alla böner från utvecklare kanske Microsoft kan avsätta lite resurser på det. Det skulle vara helt underbart. Mitt tips är att göra en lättare uppgradering till IIS 6 och försöka få till samma implementering av URL-omskrivning som i den kommande webbservern. Kalla den typ IIS 6.5.
För ett tag sen skrev jag inlägget om hur man kan skriva om webbadresser med Asp.Net (eller snarare om alla de svårigheter som är involverade). Många utvecklare har tacklats med problemet och jag tänker inte gå något djupare på de tekniska detaljerna nu. Ska dock spara lite nya länkar här som jag hittat.
Sen en adress till en Wiki helt dedikerad åt välskrivna url:er, där man kan läsa "ASP.NET - Well Designed Urls Wiki", och innehåller många relaterade länkar.
Several people have asked why the built-in URL Mapper in ASP.NET 2.0 doesn't support regular expressions. There were actually a few reasons for this -- one of the big ones being that just about the time we were about to consider adding it my team started also working on IIS7. We realized that a full-featured version would want/need to take advantage of some of the new features in IIS7 as well as the support all content types (in particular -- images and directories). So we postponed making it feature rich until a future version.
Själv är jag glad att jag inte har börjat försöka skriva om url:er på IIS 6 ännu, speciellt när man läser inlägg som "Making URL rewriting on IIS 7 work like IIS 6". Frågan är bara om man kan vänta, att ha snygga webbadresser känns ganska lockande, speciellt ur sökoptimerings-synpunkt. Men tänkt bara på att när IIS 7 släpps som riktig server-version så kan du tvingas att göra om det hela igen.
Om du vill ha några begynnande tankar från en som börjat testa url-omskrivning med IIS 7 på Vista, kan du läsa Dennis' blog.
Att ha med .aspx-ändelsen och massa querystring-parametrar på webbadresser känns lite klumpigt ibland, och inte så bra ur sökoptimerings-synpunkt. IIS6 med ASP.NET 2.0 har inte något inbyggt sätt att göra detta. Jag menar istället för för att ha en lång url som "Blog.aspx_year=2006&month=09" är det ju trevligare med "blog/2006/09".
I Ruby on Rails är omskrivning av URL:er enkelt och en naturlig del av språket. På Apache servrar finns mod_rewrite som äe en bra modul för alla PHP-utvecklare.
Med Asp.Net kan man använda HttpContext.RewritePath men det är inte så lätt som man först kan tro. Jag hittade mängder av artiklar om olika lösningar men många beskrev problem med cachning, themes och problem med PostBack.
På Urlrewriting.net finns det en open source komponent som sägs ha löst många av dessa problem. Har dock inte provat den själv.
Jag har även läst en del info om att det kommer finnas bättre stöd för detta när IIS 7.0 kommer.