[Apache] Alleen rewriten als de file niet bestaat

Pagina: 1
Acties:

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 06-08 20:42
Nu ben ik druk een website aan het bouwen en het begint te vorderen, maar ik loop tegen een probleem aan.

Ik wil met behulp van mod_rewrite mijn URLs rewriten, wat perfect werkt. Lokaal draait het allemaal als een zonnetje, maar zodra ik het boeltje upload krijg ik een error 500. Nu vermoed ik dat het aan het versie verschil ligt. Lokaal gebruik ik namelijk Apache 2.0.55 en op de server draait versie 1.3.33 van Apache.

Na wat debuggen blijkt dat het aan mijn rule ligt die ik heb ingebouwd om te zorgen dat alle andere rules alleen uit worden gevoerd als er geen bestaand bestand, map of symbolic link wordt opgevraagt.
code:
1
2
3
4
5
6
7
8
9
10
# Zet de URL rewriter aan
RewriteEngine On

# Fysieke file aanvraag gaat altijd voor:
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule (.*) $1 [L]

[verdere rules]

Apache 2 heeft geen moeite met deze rule en behandeld fysieke bestanden nu via deze rule, wat ervoor zorgt dat de hierna komende geen effect meer hebben. Apache 1.3 geeft hierdoor een internal server error en in de error_log komt te staan: mod_rewrite: maximum number of internal redirects reached.

Ik heb nu al een poos in de Apache 1.3 manual zitten zoeken, maar kom er niet echt uit waarom deze rule niet zou mogen. Laat staan waarom er oneindig wordt geredirect. Ik heb ook niet zoveel zin om boven iedere rule te zetten dat deze niet mag worden uitgevoerd als het een bestand/map betreft.

Heeft iemand dit probleem ook meegemaakt of misschien een idee wat de oplossing zou kunnen zijn?

[ Voor 8% gewijzigd door Mac_Cain13 op 21-12-2005 21:09 ]


  • Peter
  • Registratie: Januari 2005
  • Laatst online: 22:58
Zou je niet beter kunnen rewriten indien er een error 404 ontstaat, en de url dan meesturen via %{REQUEST_FILENAME} of opvragen in PHP of iets dergelijks? Dan heb je ook het geklooi met die rewrite rules niet :)

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 21-08 15:22

BCC

Dat is wel een hele nare truuk .peter. Plus dat het uiteraard meer overhead geeft, want je doet nu dingen in PHP die Apache prima hoort te doen.

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 06-08 20:42
Rewriten indien er een 404 ontstaat is vast mogelijk, maar niet echt een lekkere oplossing lijkt me. Het rare is ook dat de rule RewriteRule (.*) $1 [L] gewoon geldig is in Apache2, maar onder de Apache1.3 op de server niet wil werken.

Is er niet gewoon een soort 'Als deze regel waar is, stop dan het rewrite proces'-oplossing? Lijkt me toch iets wat wel vaker voor zou moeten komen.

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 06-08 20:42
*Schop*

Nu is het al weer enige tijd verder en ik heb nog steeds geen oplossing gevonden. Hoe rewriten jullie je URLs in het geval dat de fysieke file niet bestaat?

Het lijkt me dat dit niet onmogelijk moet zijn onder Apache 1.3, maar mijn oplossing werkt alleen onder Apache 2.

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 06-08 20:42
En ik heb de oplossing gevonden! :D

Het blijkt dat Apache 1.3 'RewriteRule (.*) $1 [L]' niet zo leuk vind. Na dit veranderd te hebben in 'RewriteRule (.*) - [L]' werkt het op zowel Apache 2 als Apache 1! Dus ik kan nu fijn mijn rewrite rules gebruiken en hoef geen rare constructies uit te halen.
Pagina: 1