Mod Rewrite überspringen Rules Server-Fehler
-
06-09-2019 - |
Frage
Der folgende Code gibt mir einen internen Server-Fehler und ich kann nicht feststellen, warum.
RewriteEngine On
SetEnv APPLICATION production
RewriteCond %{ENV:APPLICATION} =production
RewriteRule ^.*$ - [S=1]
RewriteRule ^(.*)$ html/$1.html
Alles, was es tun soll, ist die URL nehmen
/test
und drehen Sie haben es Referenz
/html/test.html
hinter den Kulissen, aber nur, wenn die Umwelt ist, die Produktion, die von der SetEnv gesetzt
Keine korrekte Lösung
Andere Tipps
Vielleicht ist meine mod Rewrite ist rostig, aber wenn ich es verstehe, scheint, dass genau das Gegenteil von dem, was Sie sagen. Wenn die Anwendung der Produktion ist, dann wird es nicht die URL neu schreiben (und überspringt es die Regel, dass würde). Ich bin nicht etwas zu sehen, dass, obwohl ein interner Serverfehler verursachen würde.
Zu tun, was Sie sagen, würden Sie brauchen 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, überprüfen Sie die Apache-Fehlerprotokoll, das die besten Infos für Internal Server Error hat 500
Entweder mache 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
Außerdem würde ich diese Regel verwenden, statt Rekursion zu vermeiden:
RewriteCond %{ENV:APPLICATION} =production
RewriteRule !^html/ html%{REQUEST_URI}.html
Schalten Sie mod Rewrite-Protokollierung nützlich Fehler zu erhalten.
RewriteLog rewrite_log
ReWriteLogLevel 2
Stellen Sie die Protokollebene für Ausführlichkeit.
Sie haben Anführungszeichen zu setzen, um die Zeichenkette, die es richtig vergleichen
RewriteCond %{ENV:APPLICATION} !="production"