Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Generel og specifikke 301 rediretcs sammen

11 views
Skip to first unread message

Preben Nielsen

unread,
Nov 17, 2011, 2:33:00 AM11/17/11
to
Når jeg en dag skifter online fra mit gamle til mit renoverede site,
vil jeg gerne sørge for at 301 redirecte fra de gamle sider til de
nye. En stor del af de nye sider adskiller adskiller sig (hvad navn og
placering angår) kun fra de gamle ved at slutte med .php i stedet
for .htm. Findes der en måde, hvor jeg kan redirecte disse sider i ét
hug altså fremfor at skulle lave henvisninger for hver enkelt side?

En del sider har fået nyt navn og/eller placering. Dem er jeg jo nødt
til at lave individuelle henvisninger til. Hvis jeg nu har ovennævnte
generelle redirect fra alle filer mitsite/mappe/filnavn.htm til
mitsite/mappe/filnavn.php og jeg så tilføjer en linje for hver af de
"individuelle" sider, vil sidstnævnte redirects så overrule den
generelle redirect, så jeg dermed bruger den generelle henvisning for
alle filer der kun skifter extension, mens de individuelle filer
henvises individuelt?
Hvis dette ikke kan lade sig gøre, hører jeg gerne gode forslag til
hvordan jeg bedst tager højde for overgangen.

/Preben

Martin Larsen

unread,
Nov 17, 2011, 7:44:58 AM11/17/11
to
Preben Nielsen wrote:

Vi tager lige dine spørgsmål i omvendt orden!

> Hvis jeg nu har ovennævnte
> generelle redirect fra alle filer mitsite/mappe/filnavn.htm til
> mitsite/mappe/filnavn.php og jeg så tilføjer en linje for hver af de
> "individuelle" sider, vil sidstnævnte redirects så overrule den
> generelle redirect

Du kan bruge RewriteMap til dette. Du laver en tekstfil fx redirects.txt
med en før og efter url pr. linje:

/gammel-url1.html /ny-url1.php
/gammel-url2.html /ny-url2.php
/gammel-url3.html /ny-url3.php

Så laver du følgende i din .htacccess eller .conf fil:

RewriteMap redirects txt:/sti/til/redirects.txt
RewriteRule ^(.*)$ ${redirects:$1} [R=301,last]

På den måde laver apache et opslag i tabellen og laver en 301 hvis der
er et match. last sørger for at følgende regler ikke udføres hvis der er
et match.

> Findes der en måde, hvor jeg kan redirecte disse sider i ét
> hug altså fremfor at skulle lave henvisninger for hver enkelt side?

Derefter tilføjer du:

RewriteRule ^(.*)\.html$ $1.php [R=301]

Som laver alle html om til den tilsvarende php.





Preben Nielsen

unread,
Nov 17, 2011, 10:40:35 AM11/17/11
to
Perfekt! Tak skal du have.

/Preben

Preben Nielsen

unread,
Nov 17, 2011, 10:46:23 AM11/17/11
to
I den .htaccess jeg har i forvejen er der nogle henvisninger af typen

redirect 301 /mappe/filnavn.htm http://mitdomæne.dk/mappe/nymappe/filnavn.htm

I din opskrift
/gammel-url1.html /ny-url1.php
har du ikke domænenavn med i forbindelse med den nye url. Er det ikke
nødvendigt?

/Preben

Martin Larsen

unread,
Nov 17, 2011, 2:46:12 PM11/17/11
to
Preben Nielsen wrote:

> Er det ikke
> nødvendigt?

Kun hvis der skal omstilles til et andet domæne. Ellers er det valgfrit.


Preben Nielsen

unread,
Nov 17, 2011, 5:23:54 PM11/17/11
to
On 17 Nov., 20:46, Martin Larsen wrote:

> Kun hvis der skal omstilles til et andet domæne. Ellers er det valgfrit.

Fint. Tak igen.

/Preben

Preben Nielsen

unread,
Nov 21, 2011, 9:08:47 AM11/21/11
to
Der er dukket endnu et ønske op: Kan det lade sig gøre i et hug at 301
redirecte alle filer fra én mappestruktur til nye filer i en anden
mappestruktur, hvor filnavnene bortset fra extension er uændrede, OG
hvor samtidig extension i de gamle filer er .htm og i de nye er .php?
Fx filer, hvor mønsteret er

/mappe_navn1/mappe_navn2/fil_1.htm /mappe_navn3/mappe_navn4/fil_1.php
/mappe_navn1/mappe_navn2/fil_2.htm /mappe_navn3/mappe_navn4/fil_2.php
/mappe_navn1/mappe_navn2/fil_3.htm /mappe_navn3/mappe_navn4/fil_3.php

fremfor at redirecte hver enkelt fil som ovenfor i en linje for sig?

/Preben



Martin Larsen

unread,
Nov 22, 2011, 3:43:25 AM11/22/11
to
Preben Nielsen wrote:

> fremfor at redirecte hver enkelt fil som ovenfor i en linje for sig?

Jep. Vender tilbage ....



Martin Larsen

unread,
Nov 22, 2011, 4:12:17 PM11/22/11
to
Preben Nielsen wrote:

> Fx filer, hvor mønsteret er
>
> /mappe_navn1/mappe_navn2/fil_1.htm /mappe_navn3/mappe_navn4/fil_1.php
> /mappe_navn1/mappe_navn2/fil_2.htm /mappe_navn3/mappe_navn4/fil_2.php
> /mappe_navn1/mappe_navn2/fil_3.htm /mappe_navn3/mappe_navn4/fil_3.php
>
> fremfor at redirecte hver enkelt fil som ovenfor i en linje for sig?
>

Dette skulle kunne gøre det:

RewriteRule ^/mappe_navn1/mappe_navn2/(.*)\.html$
/mappe_navn3/mappe_navn4/$1.php [R=301]

Preben Nielsen

unread,
Nov 22, 2011, 4:36:54 PM11/22/11
to
On 22 Nov., 22:12, Martin Larsen wrote:

> Dette skulle kunne gøre det:
>
> RewriteRule ^/mappe_navn1/mappe_navn2/(.*)\.html$
> /mappe_navn3/mappe_navn4/$1.php  [R=301]

Mange tak!

Findes der muligheder for at indsætte kommentarer i .htaccess-koden,
som forklarer, hvad de enkelte ting gør? - altså ligesom fx i css /*
kommentar */ eller i html <!-- kommentar --> ?
I givet fald, hvordan gøres det?

/Preben



Martin Larsen

unread,
Nov 22, 2011, 4:45:46 PM11/22/11
to
Preben Nielsen wrote:

> Findes der muligheder for at indsætte kommentarer i .htaccess-koden,
> som forklarer, hvad de enkelte ting gør? - altså ligesom fx i css /*
> kommentar */ eller i html<!-- kommentar --> ?
> I givet fald, hvordan gøres det?

Bare start med en havelåge:

# Dette er en kommentar
Message has been deleted

Preben Nielsen

unread,
Nov 23, 2011, 9:42:54 AM11/23/11
to
On 22 Nov., 22:45, Martin Larsen wrote:

> Bare start med en havelåge:

> # Dette er en kommentar

Tak.

Jeg er begyndt at tjekke de koder du har anvist, og denne

RewriteMap redirects txt:/redirects.txt
RewriteRule ^(.*)$ ${redirects:$1} [R=301,last]

udløser følgende fejlmelding:

The server encountered an internal error or misconfiguration and was
unable to complete your request.

uanset om koden står alene som ovenfor eller efterfulgt af

RewriteRule ^(.*)\.html$ $1.php [R=301]
sådan som du har foreslët.

Hvad kan det skyldes?

/Preben

Martin Larsen

unread,
Nov 23, 2011, 4:53:17 PM11/23/11
to
Preben Nielsen wrote:

> Hvad kan det skyldes?

Det kunne være placeringen af redirects.txt. Hvis den ligger samme sted
som .htaccess så prøv at fjerne den indledende skråstreg.

Preben Nielsen

unread,
Nov 23, 2011, 5:38:36 PM11/23/11
to
On 23 Nov., 22:53, Martin Larsen wrote:

> Det kunne være placeringen af redirects.txt. Hvis den ligger samme sted
> som .htaccess så prøv at fjerne den indledende skråstreg.

Har så prøvet med

RewriteMap redirects txt:redirects.txt
RewriteRule ^(.*)$ ${redirects:$1} [R=301,last]

Det gør ingen forskel. Og jeg tror problemet må være et andet, for jeg
har også prøvet at lægge redirects.txt i en mappe /redirects hvor
koden så var

RewriteMap redirects txt:/redirects/redirects.txt
RewriteRule ^(.*)$ ${redirects:$1} [R=301,last]

Samme resultat.

Det lader altså til at være et eller andet i koden

RewriteMap redirects txt:/sti/til/redirects.txt
RewriteRule ^(.*)$ ${redirects:$1} [R=301,last]

der laver fejlen, uanset hvad stien er, eller om redirects.txt ligger
i roden.

/Preben

Martin Larsen

unread,
Nov 24, 2011, 3:40:19 AM11/24/11
to
Preben Nielsen wrote:

> Det gør ingen forskel. Og jeg tror problemet må være et andet, for jeg
> har også prøvet at lægge redirects.txt i en mappe /redirects hvor
> koden så var

Har du mulighed for at poste hele din .htaccess og redirects.txt eller
sende mig dem på en email?

Chano Andersen

unread,
Nov 24, 2011, 4:18:25 AM11/24/11
to
Den 23/11/11 23.38, Preben Nielsen skrev:
> RewriteMap redirects txt:/sti/til/redirects.txt
> RewriteRule ^(.*)$ ${redirects:$1} [R=301,last]
>
> der laver fejlen, uanset hvad stien er, eller om redirects.txt ligger
> i roden.

Er det din din egen server, eller er det en webhosting udbyder? Er roden
filsystemts rod, eller bare toppen af det område du får adgang til via FTP?

- Chano Andersen

Preben Nielsen

unread,
Nov 24, 2011, 11:43:39 AM11/24/11
to
On 24 Nov., 10:18, Chano Andersen <sunsite012...@chanoandersen.dk>
wrote:

> Er det din din egen server, eller er det en webhosting udbyder? Er roden
> filsystemts rod, eller bare toppen af det område du får adgang til via FTP?

Det er hos webhosten. Med roden mener jeg sitets rod, som hos hosten
hedder /public_html/

On 24 Nov., 09:40, Martin Larsen wrote:

> Har du mulighed for at poste hele din .htaccess og redirects.txt eller
> sende mig dem på en email?

Jeg vil gerne nøjes med at gøre det her, hvor jeg blot har udskfitet
mit rigtige domænenavn med mitdomæne.dk og udskiftet mappe- og
filnavne med fiktive. Lige i den fase jeg arbejder med det nye site,
er jeg helst fri for tilskuere på de nye sider.

Jeg har prøvet mig frem på alle mulige måder, og konklussionen er for
mig at se utvetydig:

Den kode, der giver problemer har jeg prøvet i følgende versioner:

1) (henviser til redirects.txt i sitets rod)
RewriteMap redirects txt:/redirects.txt
RewriteRule ^(.*)$ ${redirects:$1} [R=301,last]

RewriteRule ^(.*)\.htm$ $1.php [R=301]

2) (som 1 dog uden / før redirects.txt)
RewriteMap redirects txt:redirects.txt
RewriteRule ^(.*)$ ${redirects:$1} [R=301,last]

RewriteRule ^(.*)\.htm$ $1.php [R=301]

3) (her ligger redirects.txt i mappen /redirects/)
RewriteMap redirects txt:/redirect/redirects.txt
RewriteRule ^(.*)$ ${redirects:$1} [R=301,last]

RewriteRule ^(.*)\.htm$ $1.php [R=301]

Hvis
RewriteRule ^(.*)\.htm$ $1.php [R=301]
er alene, sker der ingen fejl (den virker dog ikke, omstiller ikke til
den nye side med .php ekstension, men det er en anden historie, som
jeg tager fat på i næste omgang - lad os lige få server-fejlen væk
først)

Hvis
RewriteMap redirects txt:/redirects.txt
RewriteRule ^(.*)$ ${redirects:$1} [R=301,last]
står helt alene i .htaccess i en hvilken somhelst af de tre ovennævnte
versioner, udløses fejlen, som er en 500 internal server error.

Altså må det være den der driller.

I redirects.txt er der aktuelt (til testformålet) kun én linje af
typen:

/mappe1/filnavn.htm http://mitdomæne/mappe1/mappe2/filnavn.php

Jeg har tjekket, at adresser er korrekte både for den gamle og den nye
side.

Koderne er både i .htaccess og redirects.txt barberet helt ned til de
nævnte for at kunne indkredse fejlen med sikkerhed.

/Preben

Martin Larsen

unread,
Nov 25, 2011, 5:43:51 AM11/25/11
to
Preben Nielsen wrote:

> Hvad kan det skyldes?

Nu har jeg slået op og fundet ud af at RewriteMap ikke dur i .htaccess,
kun i hovedkonfigurationsfilen!

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritemap

Det er også her jeg selv har brugt den, men jeg gik ud fra at den også
virkede i .htaccess da langt de fleste kommandoer gør dette. Men ak.

Har du mulighed for at ændre i selve konfiguration eller i en virtual
host include fil?

Ellers kommer du nok ikke uden om at liste henvisninger direkte i din
.htaccess, men det vil jo virke alligevel. Du skal så bare bruge en
række Redirect kommandoer:

Redirect 301 /mappe1/filnavn.htm http://mitdomæne/mappe1/mappe2/filnavn.php

/mappe1/filnavn.htm er stien i browseren, ikke på serveren! Altså vil
den matche http//www.eksempel.dk/mappe1/filnavn.htm.

Håber det virker for dig!

Preben Nielsen

unread,
Nov 25, 2011, 6:07:16 AM11/25/11
to
On 25 Nov., 11:43, Martin Larsen <martin+spamfree+lar...@bigfoot.com>
wrote:

> Har du mulighed for at ændre i selve konfiguration eller i en virtual
> host include fil?

Det v ed jeg ikke, ved ikke hvad det handler om, og hvordan det i
givet fald skal gøres. Kan du detaljere lidt?

> Ellers kommer du nok ikke uden om at liste henvisninger direkte i din
> .htaccess, men det vil jo virke alligevel. Du skal så bare bruge en
> række Redirect kommandoer:
>
> Redirect 301 /mappe1/filnavn.htmhttp://mitdomæne/mappe1/mappe2/filnavn.php
>
> /mappe1/filnavn.htm er stien i browseren, ikke på serveren! Altså vil
> den matche http//www.eksempel.dk/mappe1/filnavn.htm.
>
> Håber det virker for dig!

Jeg har ikke noget problem med at få redirects linje for linje til at
virke, bruger det i forvejen. Spørgsmålet kommer af at jeg har et par
tusinde sider, så enhver forenkling ved samme mønster ville spare mig
noget tid.

/Preben

Martin Larsen

unread,
Nov 25, 2011, 7:10:07 AM11/25/11
to
Preben Nielsen wrote:

> Det v ed jeg ikke, ved ikke hvad det handler om, og hvordan det i
> givet fald skal gøres. Kan du detaljere lidt?

Et det din egen eller en dedikeret server? Eller et almindeligt
webhotel. Hvis det er det første har du mulighed for at ændre i
httpd.conf, det kan du normalt ikke på webhoteller.

> Jeg har ikke noget problem med at få redirects linje for linje til at
> virke, bruger det i forvejen. Spørgsmålet kommer af at jeg har et par
> tusinde sider, så enhver forenkling ved samme mønster ville spare mig
> noget tid.

Idet jeg går ud fra at serveren understøtter php er der en hel anden
mulighed jeg kan komme ind på senere. Har ikke tid i dag. Men kort sagt
kan man lave et samarbejde mellem apache og php som gør det.

Alternativt kan du autogenerere .htaccess ud fra din liste, så slipper
du i det mindste for det manuelle arbejde. Det vil være ganske let.

Martin


Preben Nielsen

unread,
Nov 25, 2011, 8:58:40 AM11/25/11
to
On 25 Nov., 13:10, Martin Larsen <martin+spamfree+lar...@bigfoot.com>
wrote:

> Et det din egen eller en dedikeret server? Eller et almindeligt
> webhotel.

Almindelig webhotel.

/Preben

Chano Andersen

unread,
Nov 25, 2011, 1:54:24 PM11/25/11
to
Den 24/11/11 17.43, Preben Nielsen skrev:
> On 24 Nov., 10:18, Chano Andersen<sunsite012...@chanoandersen.dk>
> wrote:
>
>> Er det din din egen server, eller er det en webhosting udbyder? Er roden
>> filsystemts rod, eller bare toppen af det område du får adgang til via FTP?
>
> Det er hos webhosten. Med roden mener jeg sitets rod, som hos hosten
> hedder /public_html/

Hvis du henviser til /redirects.txt, så opfatter Apache det som
serverens rod. Det vil sige, at du henviser til en lokation der er langt
uden for din hjemmemappe.

Du skal altså finde den præcise sti til filen, det skulle jeg mene
følgende PHP script kan hjælpe dig med:

<?php
header("Content-Type: text/plain");
print_r($_SERVER);
?>

Put denne i en fil du kalder noget med .php efter, og læg den i samme
mappe som redirects.txt, hent den derefter via din browser.

Det giver indholdet af $_SERVER variablen, som blandt andet indeholder
diverse stier. Du skal se efter en der hedder noget i stil med
/home/ditbrugernavn eller /users/ditbrugernavn eller lignende, som kunne
virke som den mappe dine filer ligger i. Derefter sætter du den foran
redirects.txt

- Chano Andersen

Preben Nielsen

unread,
Nov 27, 2011, 8:45:08 AM11/27/11
to
On 25 Nov., 19:54, Chano Andersen <sunsite012...@chanoandersen.dk>
wrote:

> Hvis du henviser til /redirects.txt, så opfatter Apache det som
> serverens rod. Det vil sige, at du henviser til en lokation der er langt
> uden for din hjemmemappe.
>
> Du skal altså finde den præcise sti til filen, det skulle jeg mene
> følgende PHP script kan hjælpe dig med:
>
> <?php
> header("Content-Type: text/plain");
> print_r($_SERVER);
> ?>
>
> Put denne i en fil du kalder noget med .php efter, og læg den i samme
> mappe som redirects.txt, hent den derefter via din browser.
>
> Det giver indholdet af $_SERVER variablen, som blandt andet indeholder
> diverse stier. Du skal se efter en der hedder noget i stil med
> /home/ditbrugernavn eller /users/ditbrugernavn eller lignende, som kunne
> virke som den mappe dine filer ligger i. Derefter sætter du den foran
> redirects.txt

Jeg forstå ikke umiddelbart hvad jeg skal gøre, og mit gæt er, at det
vil tage mig lige så lang tid at finde ud af det, som det vil tage
mig, at lave en slave-.htaccess med en linje for hver henvisning. Og
formålet skulle jo være at spare tid og arbejde.

Så med mindre der findes en løsning, som I ved virker, og som er ret
umiddelbar at gå til, så holder jeg mig til slave-modellen.

/Preben

Chano Andersen

unread,
Nov 27, 2011, 11:50:14 AM11/27/11
to
Den 27/11/11 14.45, Preben Nielsen skrev:
> Jeg forstå ikke umiddelbart hvad jeg skal gøre, og mit gæt er, at det
> vil tage mig lige så lang tid at finde ud af det, som det vil tage
> mig, at lave en slave-.htaccess med en linje for hver henvisning. Og
> formålet skulle jo være at spare tid og arbejde.

Formålet var at finde den fulde fysiske sti til dine filer.

Men hvis du kender den FULDE server sti, altså ikke bare den der er
relativ til din FTP mappe, men den faktiske sti på serveren, så skal du
smide den foran din redirects.txt

- Chano Andersen

Preben Nielsen

unread,
Nov 27, 2011, 12:04:56 PM11/27/11
to
On 27 Nov., 17:50, Chano Andersen <sunsite012...@chanoandersen.dk>
wrote:

> Formålet var at finde den fulde fysiske sti til dine filer.

Kan det ikke bare være http://mitdoæne.dk/....

/Preben

Chano Andersen

unread,
Nov 27, 2011, 1:25:18 PM11/27/11
to
Den 27/11/11 18.04, Preben Nielsen skrev:
Nej, et eksempel er, at jeg på min egen server, når jeg logger ind,
bliver præsenteret for en mappe med en undermappe domæne.dk, (Fuld sti
via FTP: /domæne.dk/) men hvis jeg logger ind via ssh (Og får en
kommando prompt på maskinen) så er stien /home/webdata/domæne.dk/domæne.dk/
Det er den sidste sti der er relevant når du skal angive en fuld sti i
et script eller en opsætningsfil.

- Chano Andersen

Martin Larsen

unread,
Nov 28, 2011, 4:32:32 AM11/28/11
to
Chano Andersen wrote:

> Formålet var at finde den fulde fysiske sti til dine filer.

Jeg vil lige indskyde at jeg for nogle dage siden postede et indlæg hvor
jeg skreve at RewriteMap desværre ikke virker i .htacces. Så det har
ikke noget med stien at gøre.

Martin Larsen

unread,
Nov 28, 2011, 9:03:05 AM11/28/11
to
Martin Larsen wrote:

> Idet jeg går ud fra at serveren understøtter php er der en hel anden
> mulighed jeg kan komme ind på senere. Har ikke tid i dag. Men kort sagt
> kan man lave et samarbejde mellem apache og php som gør det.
>
> Alternativt kan du autogenerere .htaccess ud fra din liste, så slipper
> du i det mindste for det manuelle arbejde. Det vil være ganske let.

Jeg vil gerne vide om du er interesseret i et løsningsforslag som
involverer PHP inden jeg bruger tid på det :-)

Preben Nielsen

unread,
Nov 28, 2011, 10:52:05 AM11/28/11
to
On 28 Nov., 15:03, Martin Larsen <martin+spamfree+lar...@bigfoot.com>
wrote:

> Jeg vil gerne vide om du er interesseret i et løsningsforslag som
> involverer PHP inden jeg bruger tid på det :-)

Ja, bestemt. Som nævnt er jeg blot ude på at mit tidsforbrug til at
implementere sådan løsning kan indebære en besparelse i forhold til at
lave det som enkeltlinje-redirects i .htaccess :-)
Og da jeg ikke selv kan skrive PHP, må du, hvis du går i gang, være
forberedt på en meget præcis "kogebogsopskrift".

/Preben

Preben Nielsen

unread,
Nov 29, 2011, 3:35:34 AM11/29/11
to
Et par tilføjelser:

Jeg har jo allerede lavet en redirects.txt sådan som du oprindelig
foreslog. Den indeholder alle enkeltlinje redirects. Den skulle gerne
kunne indgå i en ny løsning - det vil ikke give mening at skulle
starte forfra på den, idet det så vil tage mig lige så lang tid at
gøre det, som at tilføje det der mangler som enkeltlinje-redirects
i .htaccess, idet tingene fra redirects.txt relativt let kan
"oversættes" til brug i .htaccess.

Jeg har også tænkt, at med mindre du allerede er i fuld gang, og at
det ikke tager dig en masse tid, så er det måske ikke rimeligt at du
skal sidde og bruge en masse tid på at spare mig for en halv til en
hel dags arbejde...

/Preben


Martin Larsen

unread,
Nov 29, 2011, 3:52:55 AM11/29/11
to
Preben Nielsen wrote:

> Jeg har jo allerede lavet en redirects.txt sådan som du oprindelig
> foreslog. Den indeholder alle enkeltlinje redirects. Den skulle gerne
> kunne indgå i en ny løsning - det vil ikke give mening at skulle
> starte forfra på den

Ja, det er meningen at den skal indgå.

Martin Larsen

unread,
Nov 29, 2011, 9:03:49 AM11/29/11
to
Preben Nielsen wrote:

> Jeg har jo allerede lavet en redirects.txt sådan som du oprindelig
> foreslog. Den indeholder alle enkeltlinje redirects.

Starter alle redirects på samme måde således at Apache kan afgøre at her
er et redirect så den kan sende selve redirectet videre?

Det vilgøre det mere effektivt.

Preben Nielsen

unread,
Nov 29, 2011, 11:41:42 AM11/29/11
to
On 29 Nov., 15:03, Martin Larsen <martin+spamfree+lar...@bigfoot.com>
wrote:

> Starter alle redirects p samme m de s ledes at Apache kan afg re at her
> er et redirect s den kan sende selve redirectet videre?

Nej. I og med at filerne ligger i en del forskellige mapper, så
begynder nogle fx med
/artikler/
andre med
/billedsider/
osv
Og der er aktuelt ikke noget i redirects.txt, der fortæller at der er
tale om redirects. Ifølge din oprindelige opskrift var det jo denne
der skulle sørge for det:
RewriteMap redirects txt:/sti/til/redirects.txt
RewriteRule ^(.*)$ ${redirects:$1} [R=301,last]

> Det vilg re det mere effektivt

Hvordan det? Er det ikke sådan at enten virker et redirect eller også
gør det ikke?

Hvis det kan hjælpe, kan jeg jo godt tilføje et eller andet foran alle
linjer?



Preben Nielsen

unread,
Nov 29, 2011, 12:21:52 PM11/29/11
to
Jeg googlede lige 301 redirects php for at læse lidt om det. Her står
http://www.weborum.com/301-redirect.php:
"301 redirect through mod-rewrite in your .htaccess file
This is by far the best 301 redirect"

Er der forskel på kvaliteten af 301 redirects??? I givet fald hvilken?

/Preben

Martin Larsen

unread,
Nov 29, 2011, 2:22:28 PM11/29/11
to
Preben Nielsen wrote:

> Er der forskel på kvaliteten af 301 redirects??? I givet fald hvilken?

Nej, ingen forskel.


Martin Larsen

unread,
Nov 29, 2011, 2:27:36 PM11/29/11
to
Preben Nielsen wrote:

> Hvordan det? Er det ikke sådan at enten virker et redirect eller også
> gør det ikke?


Jojo. Men som jeg skrev ville det være mest effektivt, jeg skrev ikke at
det var en betingelse.

Sagen er jo den at hvis der er et mønster kan Apache hurtigt afgøre om
der skal redirectes, hvorefter den så kan undersøge _hvor_ der skal
redirectes til.

Er der ikke noget mønster må den simpelten kigge på alle url'er om de
findes i listen. Dette tager en smule længere tid.

Forstår du hvad jeg mener?

Endvidere, findes nogle af url'erne der skal redirectes eller vil de
alle give en 404 not found?

For i så fald kan Apache lave et tjek på om url'en findes og kun lave et
lookup hvis den _ikke_ gør. Igen, mere effektivt, men ikke strengt
nødvendigt.

Det handler jo om at finde en løsning, men helst også den rigtige løsning :)

Preben Nielsen

unread,
Nov 29, 2011, 4:16:53 PM11/29/11
to
On 29 Nov., 20:27, Martin Larsen <martin+spamfree+lar...@bigfoot.com>
wrote:
> Preben Nielsen wrote:
> > Hvordan det? Er det ikke sådan at enten virker et redirect eller også
> > gør det ikke?
>
> Jojo. Men som jeg skrev ville det være mest effektivt, jeg skrev ikke at
> det var en betingelse.
>
> Sagen er jo den at hvis der er et mønster kan Apache hurtigt afgøre om
> der skal redirectes, hvorefter den så kan undersøge _hvor_ der skal
> redirectes til.
>
> Er der ikke noget mønster må den simpelten kigge på alle url'er om de
> findes i listen. Dette tager en smule længere tid.
>
> Forstår du hvad jeg mener?

Nej, desværre ikke.

> Endvidere, findes nogle af url'erne der skal redirectes eller vil de
> alle give en 404 not found?

Det forstår jeg heller ikke. - Men jeg er også hamrende træt lige
nu :-)

> For i så fald kan Apache lave et tjek på om url'en findes og kun lave et
> lookup hvis den _ikke_ gør. Igen, mere effektivt, men ikke strengt
> nødvendigt.
>
> Det handler jo om at finde en løsning, men helst også den rigtige løsning :)

Enig. Og jeg vil til enhver tid gerne bruge mere tid på noget der
virker bedre end noget andet, vil selvfølgelig gerne have den bedste
løsning.
Jeg ved ikke om en mindre effektiv/langsommere løsning vil påvirke
søgerobotterne. Et formål med redirects, udover at de besøgende skal
kunne komme til de nye sider via gamle links, er at det er optimalt
mht. SEO. Det er vigtigt.

/Preben

Martin Larsen

unread,
Nov 29, 2011, 4:32:22 PM11/29/11
to
Preben Nielsen wrote:

> Det forstår jeg heller ikke. - Men jeg er også hamrende træt lige
> nu:-)

Fint, så tager vi den i morgen :)

Preben Nielsen

unread,
Dec 1, 2011, 9:32:11 AM12/1/11
to
On 29 Nov., 22:32, Martin Larsen <martin+spamfree+lar...@bigfoot.com>
wrote:

> Fint, så tager vi den i morgen :)

Forstår stadig ikke...

/Preben

Martin Larsen

unread,
Dec 2, 2011, 4:58:32 AM12/2/11
to
Preben Nielsen wrote:

> Forstår stadig ikke...

Du har heller ikke fået en ny forklaring :)

Har haft sindssygt travlt, vender snart tilbage


Preben Nielsen

unread,
Dec 2, 2011, 10:36:44 AM12/2/11
to
On 2 Dec., 10:58, Martin Larsen <martin+spamfree+lar...@bigfoot.com>
wrote:

> Har haft sindssygt travlt, vender snart tilbage

Helt i orden naturligvis - det var bestemt ikke for at presse. Jeg
tænkte blot at du måske troede at jeg ville forstå når jeg blev klar i
hovedet, hvilket jeg lige ville fortælle ikke skete :-)

/Preben

Martin Larsen

unread,
Dec 7, 2011, 6:07:34 PM12/7/11
to
Preben Nielsen wrote:

> Helt i orden naturligvis - det var bestemt ikke for at presse. Jeg
> tænkte blot at du måske troede at jeg ville forstå når jeg blev klar i
> hovedet, hvilket jeg lige ville fortælle ikke skete:-)

Forklaringen springer jeg over, men her er et løsningsforslag :-)

.htaccess:

ErrorDocument 404 /redirect.php

redirects.txt:

/mappe1/filnavn.htm http://mitdomæne/mappe1/mappe2/filnavn.php
/mappe1/filnavn2.htm http://mitdomæne/mappe1/mappe2/filnavn2.php

redirect.php:

<?php
$redirects = "redirects.txt";
$redirect_url = $_SERVER['REDIRECT_URL'];
$handle = @fopen($redirects, "r");
if ($handle) {
while (($line = fgets($handle, 4096)) !== false) {
list($oldUrl, $newUrl) = explode(" ", $line);
if($redirect_url == $oldUrl) {
header("Location: $newUrl", true, 301);
exit;
}
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
header('Content-Type:text/html; charset=UTF-8', true, 404);
?>
<html>
<head>
<body>
Dette er din 404 side
</body>
</head>
</html>


Ideen er den at redirect.php fungerer som 404 fejlside. Den kigger så på
den forespurgte url (REDIRECT_URL) og indlæser så din redirects.txt og
kigger efter et match.

Er der et match, hopper den til den nye url med en 301 kode.

Findes der ikke noget match, fortsætter filen sin videre færd og
udsender en 404 kode sammen med det indhold du vælger der skal stå på
din fejlside.

På den måde får du altså to fluer med et smæk, dels dine redirects, dels
en custom fejlside :)

Du skal naturligvis pille lidt ved url'erne så de passer til din server.
Det er vigtigt at fejlsiden i .htaccess starter med en slash, altså en
relativ sti fra webroden.

Preben Nielsen

unread,
Dec 8, 2011, 7:05:59 AM12/8/11
to
Mange tak for budet. Et par spørgsmål:

Er der i dit løsningsforslag inkluderet de tilfælde, som ikke er med i
redirexts.txt, men hvor de nye filer har samme navn og samme placering
i mappe-struktur, men hvor eneste forskel er, at .htm er udskiftet
med .php?

Mht, custom 404 fejlside, så har jeg lavet sådan en. Det er en php-
side, som indeholder includerede filer for header, menu og footer, og
så selvfølgelig en indholdsdel med min personlige 404-besked.
Hvordan indskrives den i dine koder, som jo tager udgangspunkt i en
noget enklere udformning af en fejlside?

Endelig et lidt mere teoretisk spørgsmål: Hvorfor er hele
udgangspunktet en fejlside i stedet for at være det som der faldes
tilbage på, hvis alt andet kikser? I min nuværende .htaccess står den
til sidst som
ErrorDocument 404 /404.htm

/Preben

Martin Larsen

unread,
Dec 8, 2011, 10:08:20 AM12/8/11
to
Preben Nielsen wrote:

> Er der i dit løsningsforslag inkluderet de tilfælde, som ikke er med i
> redirexts.txt, men hvor de nye filer har samme navn og samme placering
> i mappe-struktur, men hvor eneste forskel er, at .htm er udskiftet
> med .php?

Det kan man sagtens lave, men det kan også gøres via den .httaccess som
vi allerede har talt om. Hvis det regelsæt er opfyldt, omstilles der til
den tilsvarende php side uden at kalde fejldokumentet.

> Hvordan indskrives den i dine koder, som jo tager udgangspunkt i en
> noget enklere udformning af en fejlside?

Du skal bare indsætte min kode som det allerførste i din eksisterende
fejlside. Hvis betingelsen er opfyldt, omstilles til den pågældende fil
og scriptet forlades inden det når den resterende kode (altså det som
pt. er i din fejlside).

> Endelig et lidt mere teoretisk spørgsmål: Hvorfor er hele
> udgangspunktet en fejlside i stedet for at være det som der faldes
> tilbage på, hvis alt andet kikser? I min nuværende .htaccess står den
> til sidst som ErrorDocument 404 /404.htm

Jeg er ikke helt sikker på at jeg forstår dit spørgsmål, men det er blot
for at give php mulighed for at behandle forespørgsler på filer som ikke
findes. Uden nogen speciel styring ville de pågældende url'er jo netop
give en 404, så ved at lade php klare den får den chance for at
sammenligne med din redirects.txt. Altså i princippet det samme som i
mit første forslag, bortset fra at det altså ikke viste sig at være
gyldigt i en .htaccess.

Det kan også klare med et direktiv i stedet (RewriteCondtion). Men i
begge tilfælde handler det om at give php mulighed for at stå for
omstillingen.

Preben Nielsen

unread,
Dec 8, 2011, 12:18:55 PM12/8/11
to
On 8 Dec., 16:08, Martin Larsen <martin+spamfree+lar...@bigfoot.com>
wrote:
> Preben Nielsen wrote:
> > Er der i dit løsningsforslag inkluderet de tilfælde, som ikke er med i
> > redirexts.txt, men hvor de nye filer har samme navn og samme placering
> > i mappe-struktur, men hvor eneste forskel er, at .htm er udskiftet
> > med .php?
>
> Det kan man sagtens lave, men det kan også gøres via den .httaccess som
> vi allerede har talt om. Hvis det regelsæt er opfyldt, omstilles der til
> den tilsvarende php side uden at kalde fejldokumentet.

Skal jeg forstå det som at min .htaccess dermed kommer til at se sådan
ud:

ErrorDocument 404 /redirect.php

RewriteRule ^(.*)\.htm$ $1.php [R=301]

?

Hvis jeg forstår dig rigtig, så sker der det, at hvis en url ikke
findes som fil på serveren, så sørger din kode for at se om der er en
redirect fra url'en i redirects.txt. Og hvis der så ikke er en
redirect i redirects.txt, vil RewriteRule ^(.*)\.htm$ $1.php
[R=301] så derefter sørge for, at hvis man vil ind på
mappe4/filnavn.htm
og der findes en fil
mappe4/filnavn.php
på serveren, så vil der blive redirected fra
mappe4/filnavn.htm til mappe4/filnavn.php?
Og hvis ingen af disse ting er opfyldt, så kommer der en 404?
Er det sådan, eller hvad?

/Preben

Martin Larsen

unread,
Dec 8, 2011, 4:19:23 PM12/8/11
to
Preben Nielsen wrote:

> Skal jeg forstå det som at min .htaccess dermed kommer til at se sådan
> ud:
>
> ErrorDocument 404 /redirect.php
> RewriteRule ^(.*)\.htm$ $1.php [R=301]


Korrekt.

> Er det sådan, eller hvad?

Ja, bortset fra at RewriteRule tjekker først og viderestiller om
nødvendigt, derefter tjekkes der i redirects.txt.

Hvis der er vigtigt at rækkefølgen er omvendt, skal redirect.php i
stedet kaldes med vha en RewriteCond.

Men umiddelbart lyder det som om de to betingelser er gensidigt
udelukkende hvorved rækkefølgen skulle være uden betydning.

Med andre ord, rækkefølgen har kun betydning dersom der er match
samtidig i både redirects.txt og i den generelle regel.

Preben Nielsen

unread,
Dec 8, 2011, 5:23:05 PM12/8/11
to
On 8 Dec., 22:19, Martin Larsen <martin+spamfree+lar...@bigfoot.com>
wrote:

> Men umiddelbart lyder det som om de to betingelser er gensidigt
> udelukkende hvorved rækkefølgen skulle være uden betydning.
>
> Med andre ord, rækkefølgen har kun betydning dersom der er match
> samtidig i både redirects.txt og i den generelle regel.

OK. Der er ikke samtidigt match begge steder. Alle sider er unikke og
kommer derfor fra én url og skal henvises til én url.

Hvad med den tredje situation som jeg citerer mig selv for her?

On 21 Nov., 15:08, Preben Nielsen <p...@vinsiderne.dk> wrote:
> Der er dukket endnu et ønske op: Kan det lade sig gøre i et hug at 301
> redirecte alle filer fra én mappestruktur til nye filer i en anden
> mappestruktur, hvor filnavnene bortset fra extension er uændrede, OG
> hvor samtidig extension i de gamle filer er .htm og i de nye er .php?
> Fx filer, hvor mønsteret er
>
> /mappe_navn1/mappe_navn2/fil_1.htm /mappe_navn3/mappe_navn4/fil_1.php
> /mappe_navn1/mappe_navn2/fil_2.htm /mappe_navn3/mappe_navn4/fil_2.php
> /mappe_navn1/mappe_navn2/fil_3.htm /mappe_navn3/mappe_navn4/fil_3.php
>
> fremfor at redirecte hver enkelt fil som ovenfor i en linje for sig?

Hvor du svarer:

>Dette skulle kunne gøre det:

>RewriteRule ^/mappe_navn1/mappe_navn2/(.*)\.html$
>/mappe_navn3/mappe_navn4/$1.php [R=301]

Vil den stadig gå med din nye kode? Og skal den placeres så .htaccess
bliver sådan her:

ErrorDocument 404 /redirect.php

RewriteRule ^(.*)\.htm$ $1.php [R=301]

RewriteRule ^/mappe_navn1/mappe_navn2/(.*)\.html$
/mappe_navn3/mappe_navn4/$1.php [R=301]

?

Eller skal rækkefølgen være anderledes?

Det gælder stadig, at én gammel url skal redirecte til én ny url
(bortset fra, at jeg nok vil lade udgåede urls henvise til basislink).

/Preben

Preben Nielsen

unread,
Dec 9, 2011, 2:21:26 AM12/9/11
to
Første test udført, hvor jeg har nøjedes med den første del, altså med
denne .htaccess:

ErrorDocument 404 /redirect.php

Min fejlside udløses som den skal, men når jeg går ind på en
eksisterende url, som der er lavet redirect til i redirects.txt, så
sker der intet redirect; jeg kommer blot ind på den indtastede url.

Både redirect.php og redirects.txt har jeg lagt i roden af sitet, dvs.
samme sted som min index.htm fil befinder sig.

Hvad kan der være galt?

/Preben

Martin Larsen

unread,
Dec 9, 2011, 3:51:16 AM12/9/11
to
Preben Nielsen wrote:

> Hvad kan der være galt?

Prøv at indsætte denne linje allerførst i redirects.php og paste
indholdet her.

<?PHP echo "<pre", print_r($_SERVER, 1) . "</pre>"; exit; ?>

Preben Nielsen

unread,
Dec 9, 2011, 8:14:29 AM12/9/11
to
On 9 Dec., 09:51, Martin Larsen <martin+spamfree+lar...@bigfoot.com>
wrote:

> Prøv at indsætte denne linje allerførst i redirects.php og paste
> indholdet her.
>
> <?PHP echo "<pre", print_r($_SERVER, 1) . "</pre>"; exit; ?>

Der sker stadig ingen redirect, og nu vises 404-siden ikke ved ikke
eksisterende fil, men derimod en længere smøre, hvoraf du får de
første par linjer:

TuIJIsP5KKIAAEH8lRwAAAAP [REDIRECT_REQUEST_METHOD] => GET
[REDIRECT_STATUS] => 404 [UNIQUE_ID] => TuIJIsP5KKIAAEH8lRwAAAAP
[HTTP_ACCEPT] => image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/x-shockwave-flash

/Preben

Martin Larsen

unread,
Dec 9, 2011, 8:55:09 AM12/9/11
to
Preben Nielsen wrote:

> Der sker stadig ingen redirect, og nu vises 404-siden ikke ved ikke
> eksisterende fil, men derimod en længere smøre, hvoraf du får de
> første par linjer:

Det er helt som det skal være, da det er en debug melding jeg har indsat.

Jeg har faktisk brug for at få hele smøren!

Hvis der skulle være enkelte linjer du ikke vil have afsløret, så erstat
dem bare med XXX etc.

Martin Larsen

unread,
Dec 14, 2011, 4:05:48 AM12/14/11
to
Preben Nielsen wrote:

> Vil den stadig gå med din nye kode? Og skal den placeres så .htaccess
> bliver sådan her:
>
> ErrorDocument 404 /redirect.php
>
> RewriteRule ^(.*)\.htm$ $1.php [R=301]
>
> RewriteRule ^/mappe_navn1/mappe_navn2/(.*)\.html$
> /mappe_navn3/mappe_navn4/$1.php [R=301]

Rækkefølgen er ikke vigtig, men det kan være en god idé at tilføje et L
(last) sådan at følgende regler ikke behandles hvis der er et match.

Altså: [R=301,L]

Du har ikke meldt tilbage med debugkoden!

Har du givet op? Vi er ellers lige ved at være i mål :)

Preben Nielsen

unread,
Dec 14, 2011, 8:32:55 AM12/14/11
to
> Du har ikke meldt tilbage med debugkoden!
>
> Har du givet op? Vi er ellers lige ved at være i mål :)

Nej, jeg har faktisk indtil nu troet at jeg havde set alle indlæg, men
ser at nr. 51 er kommet på en ny side, og det havde jeg overset. Så
jeg ser altså først det indlæg nu.

Kigger på det.

/Preben

Preben Nielsen

unread,
Dec 15, 2011, 4:30:14 AM12/15/11
to
On 9 Dec., 14:55, Martin Larsen wrote:

> Jeg har faktisk brug for at få hele smøren!
>
> Hvis der skulle være enkelte linjer du ikke vil have afsløret, så erstat
> dem bare med XXX etc.

.htaccess:

ErrorDocument 404 /redirect.php
- - -

redirect.php:

<?PHP echo "<pre", print_r($_SERVER, 1) . "</pre>"; exit; ?>

<?php
$redirects = "redirects.txt";
$redirect_url = $_SERVER['REDIRECT_URL'];
$handle = @fopen($redirects, "r");
if ($handle) {
while (($line = fgets($handle, 4096)) !== false) {
list($oldUrl, $newUrl) = explode(" ", $line);
if($redirect_url == $oldUrl) {
header("Location: $newUrl", true, 301);
exit;
}
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);


}

header('Content-Type:text/html; charset=UTF-8', true, 404);
?>
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>Siden ikke fundet</title>

<link href="/css/global.css" rel="stylesheet" type="text/css"
media="screen" />

<style type="text/css">
#body_404
{
background: white;
margin-left: 26%;
}
</style>

</head>
<body id="body_404">

<h1 style="margin-top:50px">Siden ikke fundet <span style="font-
weight: 400">-
http 404 fejl</span></h1>

<p>Besked....</p>

</body>
</html>
- - -

redirects.txt:

/artikler/xxx.htm http://mitdomæne.dk/artikler/2006/xxx.php

(aktuelt kun én linje til test)

/Preben

Preben Nielsen

unread,
Jan 6, 2012, 5:16:14 AM1/6/12
to
On 14 Dec. 2011, 10:05, Martin Larsen wrote:

> Har du givet op? Vi er ellers lige ved at være i mål :)

Det lader til at du har givet op, så jeg går nu igang med en helt
manuel .htaccess med en linje for hver url.

/Preben

0 new messages