2013-08-19 5 views
6

Ich schrieb ein kleines Framework (PHP) für kleine Projekte, die in allen sollten umgeleitet werden, um index.php? Path = $ 1, mit Ausnahme der definierten Pfade. Mit dem END-Flag ist dies nicht problematisch. Aber das END Flag existiert noch seit Apache 2.3 und das Skript sollte auch auf Apache 2.2 Servern funktionieren.Htacces Apache END Flag Alternative

Hat jemand eine Idee wie ich das ohne das END-Flag realisieren kann?

RewriteEngine on 

# Define static redicts 
RewriteRule ^image/(.+)$ public/image/$1 [END,QSA] 
RewriteRule ^css/(.+)$ public/css/$1 [END,QSA] 
RewriteRule ^js/(.+)$ public/js/$1 [END,QSA] 
RewriteRule ^lib/js/core/(.+)$ core/lib/js/$1 [END,QSA] 
RewriteRule ^lib/js/(.+)$ public/lib/js/$1 [END,QSA] 
RewriteRule ^cache/(.+)$ public/cache/$1 [END,QSA] 
RewriteRule ^download/(.+)$ public/download/$1 [END,QSA] 

# Define custom redicts 
RewriteRule ^page/([0-9]+)$ index.php?path=index.php&page=$1 [END,QSA] 

# Define all other redicts 
RewriteRule ^(.+)$ index.php?path=$1 [L,QSA] 

Antwort

12

Da alle Ihre Regeln mit dem END Flagge zu beenden, Sie mehr oder weniger wollen überhaupt keine Umschlingung der Rewrite-Engine zu verhindern. das Gleiche zu erreichen, ohne die END Flagge, ersetzen sie alle mit der L Flagge und eine Pass-Through-Regel am Anfang hinzufügen:

RewriteEngine on 

# pass-through if another rewrite rule has been applied already 
RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

# Define static redicts 
RewriteRule ^image/(.+)$ public/image/$1 [L,QSA] 
RewriteRule ^css/(.+)$ public/css/$1 [L,QSA] 
RewriteRule ^js/(.+)$ public/js/$1 [L,QSA] 
RewriteRule ^lib/js/core/(.+)$ core/lib/js/$1 [L,QSA] 
RewriteRule ^lib/js/(.+)$ public/lib/js/$1 [L,QSA] 
RewriteRule ^cache/(.+)$ public/cache/$1 [L,QSA] 
RewriteRule ^download/(.+)$ public/download/$1 [L,QSA] 

# Define custom redicts 
RewriteRule ^page/([0-9]+)$ index.php?path=index.php&page=$1 [L,QSA] 

# Define all other redicts 
RewriteRule ^(.+)$ index.php?path=$1 [L,QSA]