dedlfix: Endlosschleife mit mod_rewrite

Beitrag lesen

Hi!

Dies soll aus www.example.org/index.php?g=neue_themen die Url www.example.org/index-neue_themen machen

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([^-]+)(-(.+))? $1.php?g=$3

  
(Die Sprache des lang-Attributs von [code] für Apache-Konfigurationen ist übrigens "apache", nicht "javascipt".)  
  

> "... Es kommt eine Endlosschleife zustande, welche der Server abbricht und Ihnen die Fehlermeldung ausgibt. ...".  
> So, da bin ich jetzt etwas überfragt wo da eine Endlosschleife passiert.  
  
Die Endlosschleife entsteht dadurch, dass du von "beliebig" auf "anders formuliert aber immer noch beliebig" umschreibst. Wenn das Ziel existiert ist alles in Ordnung, aber wenn es nicht existiert, landest du in der Endlosschleife. mod\_rewrite hat aufgrund der internen Apache-Arbeitsweise die Angewohnheit, wenn es in der .htaccess ausgeführt wird, die umgeschriebenen Requests erneut dem Request-Handling des Apachen zu übergeben. Auf diese Weise gelangt das umgeschriebene wieder in dein Regelwerk. In dem Zustand existierende Dateinamen werden von den beiden RewriteCond abgefangen. Alles andere durchläuft wieder die RewriteRule und so weiter ...  
  

> Und vor allem weiß ich nicht was man dagegen unternehmen könnte...  
  
Du kannst nach dem ersten erfolgreichen Rewriting nicht sagen, dass es in der nächsten Runde bitteschön nicht arbeiten soll. Das L(ast)-Flag wirkt immer nur auf weitere Regeln in der selben Datei \_und\_ Request-Runde.  
  
Das einzige, was bei allen umgeschriebenen Requests gleich ist, ist: .php?g=  
Du könntest dir eine weitere RewriteCond erstellen, die REQUEST\_URI nach diesem Teil durchsucht, wobei ich nicht weiß, ob der Query-String in REQUEST\_URI enthalten ist. Alternativ kannst du auch QUERY\_STRING auf g= am Anfang testen. (Auch hier weiß ich nicht, ob QUERY\_STRING mit dem ? beginnt oder nicht.)  
  
  
Lo!