Gundi: Endlosschleife mit mod_rewrite

Guten Morgen zusammen

Bitte um Hilfe bei folgendem Problem...

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

Was es auch macht, soll heißen es funktioniert

Jetzt ist es aber so, das bei einer falschen URL (falsch im Sinne von "gibt es nicht", also nicht vorhanden oder falsch geschrieben) nicht ein 404- Fehler, sondern ein 500- Fehler ("The server encountered an internal error or misconfiguration and was unable to complete your request.") erzeugt wird.

Nach Nachfrage bei meinem Hoster (da lt. Fehlermeldung ev. der Server nicht richtig konfiguriert ist) meinte dieser: "... 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. Und vor allem weiß ich nicht was man dagegen unternehmen könnte...
Derjenige, welcher das obige geschrieben hat ist nicht mehr verfügbar, darum bitte ich Euch hier um Hilfe.
Kann sich wer meiner annehmen und mir helfen?

Mfg Gundi

P.S.: Bitte keine Verweise zum Forum von modrewrite.de. Da habe ich bereits gepostet aber bisher noch keine Antwort erhalten... :-(

  1. 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!