2013-08-19 20 views
6

Tôi đã viết một khung công tác nhỏ (PHP) cho các dự án nhỏ, trong đó tất cả sẽ được chuyển hướng đến index.php? Path = $ 1, ngoại trừ các đường dẫn đã định nghĩa. Với cờ END, điều này không có vấn đề gì. Nhưng cờ END vẫn tồn tại kể từ Apache 2.3 và tập lệnh cũng hoạt động trên các máy chủ apache 2.2.Htacces Apache END Flag thay thế

Có ai biết cách tôi có thể nhận ra điều này mà không có cờ kết thúc không?

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] 

Trả lời

12

Vì tất cả các quy tắc của bạn kết thúc bằng END cờ, bạn ít nhiều muốn ngăn chặn bất kỳ vòng lặp của động cơ viết lại cả. Để thực hiện điều tương tự mà không sử dụng END cờ, thay thế tất cả chúng với L cờ và thêm một quy tắc passthrough tại bắt đầu:

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] 
Các vấn đề liên quan