Skiftet fra blogengine.net til WordPress

I en process med at forbedre min blog var jeg begyndt at afprøve Google Analytics kampagnevariabler, men hvis jeg til forsiden af min blogengine.net blog sendte nogle parametre med fx /?test=1, så blev der ikke vist nogle indlæg og det samme var selvfølgelig også gældende, hvis jeg sendte Google Analytics kampagnevariabler ?utm_source=rss&utm_medium=rss osv. Det kunne jeg ikke leve med! Samtidigt med at jeg ikke rigtig har fundet opskriften på at opdatere en tilpasset blogengine.net blog til seneste software version og det så sammenlignet med at jeg stort set kan finde alt det jeg har behov for som plugins til WordPress, var skiftet mere eller mindre en ret nem beslutning.

Men hvad nu med alle mine links til mine posts og Googles indeksering af mine posts, det vil jo gå tabt eller hva?

Nej ikke helt, jeg synes selv at det lykkedes mig sådan nogenlunde at få lavet noget konvertering i en overgangsperiode. Min plan:

  • Importere alt indhold ind i WordPress med “import from RSS”
  • Opsætning af Custom Permalink, som skal matche blogengine.nets links så meget som muligt
  • Google og brugerne skal kunne få vist min blogpost selvom den er flyttet og helst med en “301 Moved Permanently” redirect.

Det som ikke lykkedes at få med over i wordpress var: tags, point og kommentarer. Det er heldigvis ikke så stort et problem, da min blog ikke er særlig besøgt og jeg måske alt i alt har fået 5-10 kommentarer på ca. 50 posts, pointene er jeg lidt ligeglad med, og tags kan jeg gendanne manuelt. Men for en etableret blog ville det helt klart være en showstopper, men måske en anden finder ud af en metode.

Importere alt indhold i WordPress med “import from RSS”

Det gik helt efterplanen, den fik oprettet alle mine kategorier, og fik lagt alle mine posts ind, men desværre uden tags, point og kommentarer. De er simpelthen ikke med i RSS feed’et fra blogengine.net.

Opsætning af Custom Permalink, som skal matche blogengine.nets links så meget som muligt

Jeg vidste godt, at jeg måtte rundt på nettet og finde en efterligning af Apaches mod_rewrite til  IIS 6.0. Og jeg fandt et dedikeret WordPress URL rewriter ISAPI modul http://www.binaryfortress.com/wordpress-url-rewrite/, som kan justeres med en ini-fil i henhold til, hvilke stier der skal rewrites, og hvilke som skal ignoreres. Og installationen af ISAPI modulet er heldigvis ikke en automatisk installation i IIS’en, så den installerer sig på alle websites. Installationen skal foretages manuelt – helt igennem efter hvad jeg kunne tænke mig!

Jeg retter ini-filen til, så jeg får ignoreret de undermapper, jeg har behov for, og får tilføjet de undermapper der skal aktiveres rewrite på. Jeg må lige Recycle min Application Pool, og så ser det ud til at fungere.

Google og brugerne skal kunne få vist min blogpost selvom den er flyttet og helst med en “301 Moved Permanently” redirect.

I Blogengine.net så mine links til posts sådan ud: http://blogs.co3.dk/Kevin%20Steffer/post/min-blog-title.aspx. ØV! Der står jo .aspx til sidst, nå det må jeg også lige få fikset. Nå men jeg sætter min custom permalink indstilling i WordPress til at se sådan ud: /post/%postname%/ mine links ser ud nu sådan ud i min nye WordPress blog: http://blogs.co3.dk/kevinsteffer/post/min-blog-title/.

På mit gamle site http://blogs.co3.dk/Kevin%20Steffer/ fortæller jeg nu IIS’en at mit Virtual Directory skal være en redirection til en URL og angiver den nye URL http://blogs.co3.dk/kevinsteffer:

iis_redirect

Bemærk: Der er ikke flueben i “The exact URL entered above” og der er flueben i “A permanent redirection for this resource”.

Forklaring på “The exact URL entered above”: Når der ikke er flueben i indstillingen så sender den side-forespørgslen videre til den angivede URL adresse. Det betyder når denne virtuelle mappe “/Kevin%20Steffer/” får en forespørgsel på /post/min-blog-title.aspx så bliver den redirectet til den virtuelle mappe “/kevinsteffer/” med samme forespørgsel på /post/min-blog-title.aspx – lige hvad vi har behov for, at flueben i denne indstilling og du vil i løbet af kort tid have ødelagt dit grundlag for at genbruge Googles allerede indsekserede sider.

Når så WordPress sitet får en forespørgsel på /post/min-blog-title.aspx overtager ASP.NET handleren desværre forespørgslen, fordi det er en .aspx side, og sender mig en 404 fejl, så jeg skal ahve fjernet ASP.NET handleren for .aspx sider, så jeg kan fange den med en custom-error handler skrevet i php, som så redirecte over til den nye post URL.

Gammel URL: /Kevin%20Steffer/post/min-blog-title.aspx
Ny URL: /kevinsteffer/post/min-blog-title/

Nu vil jeg fjerne ASP.NET handleren for aspx-sider i IIS’en så den ikke er her i listen

aspx_removed 

Så jeg laver først en custom error handler i IIS’en

php_404_error_handler

Nu vil alle 404 fejl ramme min /kevinsteffer/404.php URL, hvor jeg så kan forespørge på hvilken side man har ville se, for så at redirect til den rigtige side.

Så min 404.php ser sådan ud:

  1: <?php 
  2: header("HTTP/1.1 301 Moved Permanently");
  3: $aspxpos = strpos($_SERVER['REQUEST_URI'],'.aspx');
  4: $axdpos = strpos($_SERVER['REQUEST_URI'],'.axd');
  5: 
  6: if ($aspxpos > -1) {
  7: 	list($before,$after) = split(';',$_SERVER['REQUEST_URI']);
  8: 	$after = ereg_replace('/default','', $after);
  9: 	header('Location: '.ereg_replace('.aspx','/',ereg_replace(':80','',$after)));
 10: } else if ($axdpos > -1) {
 11: 	header('Location: /kevinsteffer/feed/');
 12: } else {
 13: 	header('Location: /kevinsteffer/');
 14: }
 15: ?>

Som du kan se, har jeg også en håndtering for .axd filer. Jeg har også fjernet ASP.NET handleren for .axd filer i IIS på same måde, som jeg gjorde med .aspx filer. I blogengine.net er min RSS-feed adresse /syndication.axd og i WordPress er den bare /feed/. Det betyder at jeg konsekvent redirecter til /kevinsteffer/feed/ hvis man forsøger at kalde en .axd fil.

I dag er jeg bare helt vildt happy over mit skifte og har allerede gang i min WordPress plugins:

Don’t worry be happy

– Bobby McFerrin

, ,

Skriv et svar

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>