2010-02-01 25 views
5

Quy tắc mod_Rewrite để kiểm tra nhiều vị trí thư mục cho một tệp nhất định là gì. Ví dụ, nếu tôi có một cấu trúc thư mục của:Cách sử dụng mod_Rewrite để kiểm tra nhiều thư mục cho một tệp tĩnh

public/ 
    css/ 
    library1/ 
     css/ 
    library2/ 
     css/ 

và tôi muốn yêu cầu /css/somefile.css đầu tiên kiểm tra các thư mục public/css/, sau đó thác để public/library1/css/ sau đó public/library2/css/, trả lại 404 nếu một tài sản không thể được tìm thấy trong bất kỳ các thư mục.

Tôi đã suy nghĩ dọc theo dòng:

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond library1%{REQUEST_URI} -f 
RewriteRule ^(.*)$ library1$1 [L] 

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond library2%{REQUEST_URI} -f 
RewriteRule ^(.*)$ library2$1 [L] 

Nhưng điều này dường như không làm việc - Tôi không chắc chắn làm thế nào để kiểm tra sự tồn tại của tập tin trên một con đường tạo động.

Trả lời

6

Hãy thử những quy tắc:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/library1%{REQUEST_URI} -f 
RewriteRule ^css/.+ library1%{REQUEST_URI} [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/library2%{REQUEST_URI} -f 
RewriteRule ^css/.+ library2%{REQUEST_URI} [L] 
+0

Chúc mừng cho điều đó - Tôi không nhận ra sự% Biến {DOCUMENT_ROOT} khi đọc tài liệu. – DavidWinterbottom

+0

@DavidWinterbottom: Bạn cần đường dẫn hệ thống tệp tuyệt đối khi bạn muốn kiểm tra các tệp hiện có, thư mục, v.v. * YÊU CẦU \ _FILENAME * đã chứa đường dẫn hệ thống tệp tuyệt đối nhưng * REQUEST \ _URI * chỉ đường dẫn URL tuyệt đối. – Gumbo

+0

@Gumbo: không nên tham chiếu dòng 6 'library2'? –

1

Có thể các biến máy chủ không chứa những gì bạn nghĩ. Hãy thử tăng ghi nhật ký để gỡ lỗi, vì vậy bạn có thể thấy chính xác những gì đang diễn ra.

0

Hãy thử điều này:

# Loads files from production server 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (library1|library2)/(.*)$ http://production.com/$1/$2 [R=302,L,NC] 

Để đạt được điều này:

something.dev/ library1 /style.css -> production.com/ library1/style.css something.dev/ library2/vendor/css/style.css -> production.com/ library2/vendor/css/style.css

Các vấn đề liên quan