2013-08-19 6 views
6

Napisałem mały framework (PHP) dla małych projektów, które w sumie powinny zostać przekierowane do index.php? Path = $ 1, z wyjątkiem zdefiniowanych ścieżek. Z flagą END nie jest to problematyczne. Jednak flaga END istnieje jeszcze od Apache 2.3, a skrypt powinien działać również na serwerach Apache 2.2.Htacces Apache END Flag alternatywa

Czy ktoś ma pomysł, jak mogę zrealizować to bez flagi END?

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] 

Odpowiedz

12

Od wszystkich zasad skończyć z flagą END, mniej lub bardziej chcą uniknąć zapętlenie silnika przepisywania w ogóle. Aby osiągnąć to samo bez użycia flagi END, wymienić je wszystkie z flagą L i dodać Przejściówka reguły na zaczynają:

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]