[apache] mod_rewrite en bestaande directories

Pagina: 1
Acties:

  • Pantalaimon
  • Registratie: Mei 2004
  • Laatst online: 02-02 11:58
Voor m'n site gebruik ik één hoofdscript wat alle verschillende pagina's levert, we noemen deze maar even pagina.php. D.m.v. GET variabelen geef ik het script aan welke pagina of subpagina uit de database gehaald moet worden. Om de URL's netjes te houden en z'n structuur wat te verbergen rewrite ik ze met mod_rewrite.

So far so good.

Nu is er een pagina in het script, /pagina.php?pag=downloads, die ik wil rewriten naar www.domein.nl/downloads/, maar het probleem hierbij is dat de directory downloads in dit geval wel al bestaat. mod_rewrite raakt hierbij in de war en krijg uiteindelijk de URL www.domein.nl/downloads/?pag=downloads terug. De output is wel helemaal in orde, alleen de URL raakt dus fucked up.

Voor de uniformiteit wil ik deze directory downloads dus wel behouden, deze staat gevuld met, hoe verrassend, bestanden die beschikbaar zijn voor download. Alleen als de pagina www.domein.nl/downloads opgevraagd wordt, dus zonder een bestand erachter, dan gaat mod_rewrite de mist in.

Zie ik hier iets over het hoofd; is dit uberhaupt mogelijk zonder nukken, of is er een passende workaround voor het probleem?

Think of me long enough to make a memory


  • Koetjeboe
  • Registratie: Maart 2002
  • Laatst online: 15-02 23:09

Koetjeboe

Boe, zegt de koe

Laat je mod_rewrite meuk eens zien? Misschien is het dan iets duidelijker wat je bedoeld

Misschien een regel aan het begin opnemen die

code:
1
www.domein.nl/downloads/(.+) www.domein.nl/downloads/$1 [R,L]


redirect als het zo'n url is?

  • Pantalaimon
  • Registratie: Mei 2004
  • Laatst online: 02-02 11:58
Koetjeboe schreef op dinsdag 11 juli 2006 @ 18:04:
Laat je mod_rewrite meuk eens zien? Misschien is het dan iets duidelijker wat je bedoeld

Misschien een regel aan het begin opnemen die

code:
1
www.domein.nl/downloads/(.+) www.domein.nl/downloads/$1 [R,L]


redirect als het zo'n url is?
Deze code staat in mijn root .htaccess :

code:
1
2
3
4
5
6
7
8
9
Options -Indexes
RewriteEngine on
RewriteBase /
RewriteRule ^nieuws/?$ /pagina.php?p=nieuws
RewriteRule ^nieuws/([0-9]+)/?$ /pagina.php?p=nieuws&id=$1
RewriteRule ^downloads/?$ /pagina.php?p=downloads
RewriteRule ^downloads/([0-9]+)/?$ /pagina.php?p=downloads&cat=$1
RewriteRule ^contact/?$ /pagina.php?p=contact
RewriteRule ^links/?$ /pagina.php?p=links


www.domein.nl/downloads/ laat dus een index zien van de beschikbare download categorieen
www.domein.nl/downloads/<waarde>/ laat de inhoud van de gekozen categorie zien.

Dat laatste, op categorie, gaat wel prima, alleen de www.domein.nl/downloads/ geeft www.domein.nl/downloads/?pag=downloads terug

Verder, als iemand op een link als www.domein.nl/downloads/bestand.zip klikt, zou hij dus niets moeten rewriten (anders krijg je /pagina.php?pag=downloads&cat=bestand.zip taferelen wat niet goed kan gaan :+)

Think of me long enough to make a memory


  • Koetjeboe
  • Registratie: Maart 2002
  • Laatst online: 15-02 23:09

Koetjeboe

Boe, zegt de koe

Hmm, dat zou moeten werken :P

Altans, heb het hier op mijn servertje geprobeerd:

code:
1
2
3
4
5
6
7
8
Options -MultiViews
<IfModule mod_rewrite.c>
    Options -Indexes
    RewriteEngine on
    RewriteBase /
    RewriteRule ^downloads/?$ /pagina.php?p=downloads
    RewriteRule ^downloads/([0-9]+)/?$ /pagina.php?p=downloads&cat=$1
</IfModule>


Versimpeling van wat jij hebt dus, en hier werkt het. Dus, misschien redirect je ergens in je pagina.php? (header(...)) Of een aparte server instelling....

Hier kun je het zien:
http://www.zoja.nl/downloads
http://www.zoja.nl/downloads/
http://www.zoja.nl/downloads/12312
http://www.zoja.nl/downloads/blablabla

  • Pantalaimon
  • Registratie: Mei 2004
  • Laatst online: 02-02 11:58
Ik redirect nergens in de pagina. En jij gebruikt wel een (lege) directory "downloads" in je voorbeeld?


Zonder de trailing slash laat ie het probleem zien. Met trailing slash doet ie het okee, ditto met cat nummer en filenaam...

Nu alleen nog dat ie ook werkt zonder de trailing slash :)

[ Voor 15% gewijzigd door Pantalaimon op 12-07-2006 17:49 ]

Think of me long enough to make a memory


  • Pantalaimon
  • Registratie: Mei 2004
  • Laatst online: 02-02 11:58
Hmm het betreft hier idd een bug: http://issues.apache.org/bugzilla/show_bug.cgi?id=31210

Mogelijke oplossing is dus een trailing slash te forcen met:
code:
1
2
RewriteRule ^(nieuws|downloads)$ /$1/ [R=301,L]
RewriteRule ^(nieuws|downloads)/$ /pagina.php?p=$1 [L]

Think of me long enough to make a memory

Pagina: 1