[mod_rewrite]Doorverwijzen gaat niet altijd goed

Pagina: 1
Acties:

  • Sappie
  • Registratie: September 2000
  • Laatst online: 27-04 07:10

Sappie

De Parasitaire Capaciteit!

Topicstarter
Ik ben sinds kort bezig met de rewrite module van apache om nette URI's te maken (http://www.w3.org/Provider/Style/URI). Nu wil ik het volgende bewerkstelligen, wat ook deels lukt:
code:
1
2
3
http://www.site.nl/nieuws moet verwijzen naar http://www.site.nl/pages/index.php?page=nieuws (dit gaat goed)

http://www.site.nl/nieuws/artikel moet verwijzen naar http://www.site.nl/pages/index?page=nieuws&subpage=artikel (dit gaat deels goed)

Daarvoor maak ik gebruik van de volgende rewrite rules (in een .htaccess in de document root):
code:
1
2
3
4
RewriteEngine on
RewriteBase /pages/
RewriteRule ^([A-z0-9-]+)$ nieuws.php?page=$1
RewriteRule ^([A-z0-9-]+)/([A-z0-9-]+)$ nieuws?page=$1&subpage=$2
Wat er nu in dit geval (http://www.site.nl/nieuws/artikel) fout gaat is mij een raadsel.

Het gaat in principe wel goed, alleen worden de css (in http://www.site.nl/css/) en de images (in http://www.site.nl/images/) niet meer gevonden. Wel wordt de header geinclude (mbv php) (in http://www.site.nl/includes/).

Ik ben al een tijd bezig met dit probleem en vraag me af wat ik in dit geval fout doe. Iemand die me misschien even op weg kan helpen?

[ Voor 3% gewijzigd door Sappie op 15-04-2005 16:02 ]

Specs | Audioscrobbler


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je moet bij je character classes oppassen dat je niet upper- en lowercase verwart:

code:
1
2
3
^([A-Za-z]....)
of
RewriteRule ^([a-z]) x.php [I]

Met de [I] voor case-insensitive match.

edit:
Wat betreft de css en de images moet je RewriteCond condities toevoegen:

code:
1
RewriteCond %{REQUEST_URI} !^images|css [NC]

boven je rewrite rule.

Zie ook: http://httpd.apache.org/d..._rewrite.html#RewriteCond

[ Voor 39% gewijzigd door drm op 15-04-2005 16:11 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Sappie
  • Registratie: September 2000
  • Laatst online: 27-04 07:10

Sappie

De Parasitaire Capaciteit!

Topicstarter
ow k.. ik dacht dat [A-z] equivalent was van [A-Za-z], maar dan schort t ook nog aan mijn regular expression kennis :) maargoed.. dit lost het probleem ook niet op

Specs | Audioscrobbler


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Mja, ik las niet goed, de rule werkte al 8)7 Kennelijk accepteert mod_rewrite die notatie ook, dat wist ik niet. Maar lees m'n aanvulling nog ff :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Sappie
  • Registratie: September 2000
  • Laatst online: 27-04 07:10

Sappie

De Parasitaire Capaciteit!

Topicstarter
Ik refereer in mijn html op deze manier naar de css: "../css/style.css".

Dus ik denk dat die rewrite condition in mijn geval niet nodig is (css/style.css matched immers geen van de geboden reg exp'en), of zie ik dat verkeerd?. Eerder gooit het gebruik van de relatieve paden (wat uiteraard zeker mijn voorkeur heeft) op één of andere manier roet in het eten.

edit:
Mijn google zoekopdracht naar "mod_rewrite relative paths" levert me wel een hoop links op, waaruit ik volgens mij wel wat op kan maken. Ondanks dat heb ik het antwoord nog niet gevonden, maar dat zal nu niet lang meer duren denk ik. Niet lang genoeg gegoogled dus. Van mij mag deze dus wel op slot.

[ Voor 40% gewijzigd door Sappie op 15-04-2005 16:29 ]

Specs | Audioscrobbler


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Oh ja, op die fiets. Ik lees echt als een krant vandaag :Z, maar goed...

Wat je wel kunt doen in dergelijke gevallen is alle verwijzingen naar .*css/style.css rewriten naar css/style.css. En hetzelfde idee voor de plaatjes. Het grootste nadeel daarvan is dat de plaatjes niet meer in alle gevallen gecached gaan worden; de browser denkt tenslotte dat je het over andere plaatjes hebt als ze in een andere dir staan (terecht :P)
edit:
tenzij je het met een [R] parameter doet, bedenk ik me....


De meest eenvoudige oplossing is gewoon een base href opgeven in je html of met absolute paden verwijzen.

Tot slot kun je nog aan de hand van de "diepte" van de opgevraagde url een soort prefix-path aanmaken die alle verwijzingen in je html naar de ../../../-ste subdirectory laten verwijzen. Maar daar word je ook niet echt vrolijk van, lijkt me.

[ Voor 5% gewijzigd door drm op 15-04-2005 18:08 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1