Deel van de mappen middels een Rewriterule redirecten (301)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • klaaz
  • Registratie: April 2000
  • Laatst online: 18-09 22:37

klaaz

it's me!

Topicstarter
Ik draai hier een CMS + rewrites naar vriendelijke URL's maar wil een klein, door een externe partij aangeleverde map + pagina's met 301 redirecten (URL's eindigend op bijvoorbeeld map/pagina voorzien van .html)

De website gebruikt standaard de volgende URL structuur:

www.domein.nl/map/pagina

Nu wil ik conditioneel de inhoud van een bepaalde map:

www.domein.nl/bepaaldemap/pagina

wijzigen in:

www.domein.nl/bepaaldemap/pagina.html

De overige mappen dienen met rust te worden gelaten.

Daarnaast dient:

www.domein.nl/bepaaldemap

te worden geredirect naar

www.domein.nl/bepaaldemap/index.html

Na flink wat zoekwerk ben ik op het volgende gekomen:
RewriteRule ^laadkraan/$ laadkraan/index.html [R=301,L]
RewriteRule ^laadkraan/(.*)$ laadkraan/$1.html [R=301,L]

Het probleem hier is echter dat de conditie na elke redirect wordt herhaald waardoor de pagina in een loop terecht komt. De eerste regel alleen werkt wel.

Ik zie het even niet meer terwijl het volgens mij zeer simpel moet zijn... Kan iemand mij weer even op weg helpen?

Acties:
  • 0 Henk 'm!

  • ieperlingetje
  • Registratie: September 2007
  • Niet online
Wissel de regels eens om

RewriteRule ^laadkraan/(.*) laadkraan/$1.html [R=301,L]
RewriteRule ^laadkraan/ laadkraan/index.html [R=301,L]

In jouw geval werd steeds voldaan aan de eerste regel, maar nooit aan de tweede.

Edit: net gemerkt dat je een redirect doet, dus wat gebeurt er nu:
laadkraan/voorbeeld wordt opgevraagd, gaat naar laadkraan/voorbeeld.html
laadkraan/voorbeeld.html wordt opgevraagd, gaat naar laadkraan/voorbeeld.html.html

Dus beter die R weglaten

RewriteRule ^laadkraan/(.*) laadkraan/$1.html [L]
RewriteRule ^laadkraan/ laadkraan/index.html [L]

Overigens is het altijd handig virtuele en fysieke url's te scheiden, en te gaan rewriten via een virtuele map

bijv. ^virtuelemap/(.*) echtemap/$1.html [R=301,L]

Als je toch wil redirecten binnen bestaande mappen, gebruik dan het volgende:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^laadkraan/(.*) laadkraan/$1.html [R=301,L]
RewriteRule ^laadkraan/ laadkraan/index.html [R=301,L]

[ Voor 71% gewijzigd door ieperlingetje op 15-07-2009 14:22 ]

Tijdmachine | Nieuws trends


Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
2
3
RewriteRule ^laadkraan/$ /laadkraan/index.html [R=301,L]
RewriteCond %{REQUEST_FILENAME} !^laadkraan/.*\.html$
RewriteRule ^laadkraan/(.+)$ /laadkraan/$1.html [R=301,L]

Zoiets zou moeten werken volgens mij.

Eerst worden requests naar /laadkraan/ botweg geredirect naar /laadkraan/index.html en vervolgens wordt laadkraan/[whatever] geredirect naar /laadkraan/[whatever].html maar alleen als de request niet al op .html eindigt.

edit:
Let op de .+ in de 2e RewriteRule i.p.v. .* omdat die laatste ook lege strings (* is 0 of meer keer) matcht. .+ matcht 1 of meer teken.

[ Voor 14% gewijzigd door Verwijderd op 15-07-2009 18:38 ]