2009-05-30 4 views
0

Der folgende Code gibt mir einen internen Serverfehler und ich kann nicht feststellen, warum.Mod Rewrite Skip Rules Serverfehler

RewriteEngine On 
SetEnv APPLICATION production 
RewriteCond %{ENV:APPLICATION} =production 
RewriteRule ^.*$ - [S=1] 
RewriteRule ^(.*)$ html/$1.html 

Alles, was es tun sollte, ist die

/test 

url nehmen und ihn

/html/test.html 

hinter den Kulissen verweisen, aber nur, wenn die Umwelt ist, die Produktion, die durch gesetzt Das SetEnv

Antwort

1

Vielleicht ist meine Mod Neufassung rostig, aber wenn ich es verstehe, scheint das das Gegenteil zu tun von dem, was du sagst. Wenn die Anwendung Produktion ist, dann wird sie die URL NICHT umschreiben (und sie überspringt die Regel, die das würde). Ich sehe jedoch nichts, was einen internen Serverfehler verursachen würde.

zu tun, was Sie sagen, Sie müßten so etwas wie:

RewriteEngine On 
SetEnv APPLICATION production 
RewriteCond %{ENV:APPLICATION} !=production 
RewriteRule ^.*$ - [S=1] 
RewriteRule ^(.*)$ html/$1.html 

Wenn Sie immer noch Probleme haben, Ihr Apache-Fehlerprotokoll überprüfen, die die besten Infos für Internal Server Error hat 500

0

Entweder tut es wie Todd Gardner sagte oder die redundante Regel entfernen und die Bedingung für die zweite Regel binden:

RewriteEngine On 
RewriteCond %{ENV:APPLICATION} =production 
RewriteRule ^(.*)$ html/$1.html 

Zusätzlich ich diese Regel stattdessen verwenden würde zu vermeiden Rekursion:

RewriteCond %{ENV:APPLICATION} =production 
RewriteRule !^html/ html%{REQUEST_URI}.html 
0

Aktivieren Sie die Mod-Neuschreiben-Protokollierung, um nützliche Fehler zu erhalten.

RewriteLog rewrite_log 
ReWriteLogLevel 2 

Passen Sie die Protokollebene für Ausführlichkeit an.

0

Sie haben Anführungszeichen zu setzen, um die Zeichenkette, die es richtig

RewriteCond %{ENV:APPLICATION} !="production" 
zu vergleichen