Avatar billede noscope Nybegynder
12. juni 2004 - 16:18 Der er 16 kommentarer

Hjælp til mod_rewrite & regex til reddirect af URLs

Hej,

Jeg kører blog systemet Movable Type hvor jeg har permanente URLs til hvert enkelt blog post. For nylig har jeg renset lidt op i disse permanente URLs, og altså hvor hvert enkelt blog post bliver arkiveret.

Den gamle URL:
http://www.noscope.com/journal/archives/2001/01/01/page.php

Den nye URL:
http://www.noscope.com/journal/2001/01/page

(begge siderne er p.t. test sider, men er repræsentative).

Der er altså tale om et rimeligt konsistent skift.

Jeg håber nu på, ved hjælp af .htaccess og mod_rewrite at lave 301 permanent redirects på alle gamle urler, til de nye urler, så Google kan følge med.

Indtil videre har jeg dette i min .htaccess:

RewriteEngine On
RewriteBase /journal/archives/
RewriteRule ^2001/?(.*) /journal/2001/$1 [R=301]

...dette laver
http://www.noscope.com/journal/archives/2001/01/01/page.php
om til
http://www.noscope.com/journal/2001/01/01/page.php

dvs. ikke helt godt nok endnu.

Hjælp ønskes derfor fra hajer til apache, mod_rewrite eller regular expressions

TAK!
Avatar billede erikjacobsen Ekspert
12. juni 2004 - 16:31 #1
Står der altid det samme 01/01 ??
Avatar billede noscope Nybegynder
12. juni 2004 - 17:07 #2
Pinligt, det glemte jeg at uddybe.

Urlen, efter "journal" er "ÅR/MÅNED/DAG", dvs. "2001/01/01" er 1. januar 2001 -- i dette tilfælde bare som eksempel url...

dvs.
journal/archives/[årstal]/[måned]/[dag]/postnavn.php
skal laves om til
journal/[årstal]/[måned]/postnavn

(dvs. uden "archives", uden "dag" og uden ".php")

TAK!
Avatar billede erikjacobsen Ekspert
12. juni 2004 - 17:40 #3
Ok, men hvis du fjerner dagen, går det da ikke op?
Avatar billede noscope Nybegynder
12. juni 2004 - 17:42 #4
Hvordan mener du? Kan det ikke lade sig gøre at fjerne "dag", delen?

Her er et eksempel på faktiske blog posts, i gamle og nye urler - begge links virker p.t.:

Gammel URL:
http://www.noscope.com/journal/archives/2004/04/10/migrating_to_firefox.php

skal 301 (permanent) redirectes til ny url:
http://www.noscope.com/journal/2004/04/migrating_to_firefox
Avatar billede erikjacobsen Ekspert
12. juni 2004 - 18:01 #5
Hvordan skal man ud fra den nederste gætte at du har skrevet det den 10. april?
Avatar billede noscope Nybegynder
12. juni 2004 - 18:32 #6
Det skal man ikke... dagens dato er et "tab" som jeg med vilje lider. Dagens dato skal, med andre ord, bare slettes... det må da kunne lade sig gøre med regular expressions?

Jeg bruger ikke datoen til noget... den er bare "pynt"...

Er det umuligt?
Avatar billede erikjacobsen Ekspert
12. juni 2004 - 18:42 #7
Ok, da. Hvis den nye URL faktisk virker, så har jeg jo ikke noget at komme efter.
Til sagen, ganske utestet:

RewriteEngine On
RewriteBase /journal/archives/
RewriteRule ^2001/([0-9]+)/([0-9]+)/[0-9]+/([^.]+)\.php /journal/2001/$1/$2/$3 [R=301]
Avatar billede noscope Nybegynder
12. juni 2004 - 20:03 #8
Tak for tippet... har prøvet nu. Umiddelbart ingen effekt på

http://www.noscope.com/journal/archives/2001/01/01/page.php

desværre

.htaccessen indeholder præcis det du skrev, og ligger i

http://www.noscope.com/journal/archives/.htaccess
Avatar billede noscope Nybegynder
12. juni 2004 - 22:53 #9
Vent, jeg tror næsten det virker nu!

RewriteBase /journal/archives/
RewriteRule ^2001/([0-9]+)/[0-9]+/([^.]+)\.php /journal/2001/$1/$2/$3 [R=301]

jeg fjernede en enkelt "([0-9]+)/", og nu virker

http://www.noscope.com/journal/archives/2001/01/01/page.php

nu mangler jeg bare at årstallet osse bliver sendt med... men mon ikke det er nok med

RewriteRule ^([0-9]+)/([0-9]+)/([0-9]+)/[0-9]+/([^.]+)\.php /journal/$1/$2/$3/$4 [R=301]
Avatar billede noscope Nybegynder
12. juni 2004 - 23:13 #10
Det virker nu, men kan nok godt blive pænere. Hvis du lige gider hjælpe mig med éen ting til, så skal jeg nok stoppe!

Jeg har fået det til at virke med denne kode:

RewriteBase /journal/archives/2004/
RewriteRule ^([0-9]+)/[0-9]+/([^.]+)\.php /journal/2004/$1/$2/$3 [R=301]

det er altså kun årstallet der mangler -- kunne man ikke osse gøre det dynamisk?

MANGE tak på for din hidtidige hjælp!
Avatar billede noscope Nybegynder
13. juni 2004 - 16:16 #11
Er der en enkelt der kan hjælpe mig med den sidste del af problemet?

RewriteBase /journal/archives/2004/
RewriteRule ^([0-9]+)/[0-9]+/([^.]+)\.php /journal/2004/$1/$2/$3 [R=301]

laver

http://www.noscope.com/journal/archives/2004/04/10/migrating_to_firefox.php
til
http://www.noscope.com/journal/2004/04/migrating_to_firefox
som den skal, men kan årstallet i
RewriteBase /journal/archives/2004/
ikke gøres dynamisk?

Forresten, hvordan fordeler jeg de points jeg har uddelt?
Avatar billede erikjacobsen Ekspert
14. juni 2004 - 19:41 #12
Ja, jeg har lige været uden Internet i et par dage ... ret uhyggeligt ... Prøv:

RewriteBase /journal/archives/
RewriteRule ^([0-9]+)/([0-9]+)/[0-9]+/([^.]+)\.php /journal/$1/$2/$3/$4 [R=301]

# ganske utestet ;)
Avatar billede erikjacobsen Ekspert
14. juni 2004 - 19:43 #13
Hmm, du har da kun 3 (...)-ere nu:

RewriteBase /journal/archives/
RewriteRule ^([0-9]+)/([0-9]+)/[0-9]+/([^.]+)\.php /journal/$1/$2/$3 [R=301]
Avatar billede noscope Nybegynder
14. juni 2004 - 20:11 #14
Det virker perfekt! Alt er præcis som det skal være! STORT tak!

Hvordan fordeler jeg de 200 points?
Avatar billede erikjacobsen Ekspert
14. juni 2004 - 20:23 #15
Du tager dem bare selv - jeg samler slet ikke på point.
(svar selv, accepter eget svar)
Avatar billede noscope Nybegynder
14. juni 2004 - 21:24 #16
Hvor ædelt, men nej tak :)

MANGE tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester