2011-10-18 44 views
10

Tôi muốn đặt tiêu đề bộ nhớ cache theo điều kiện tùy thuộc vào tệp đường dẫn nào được truy cập. Về cơ bản, việc truy cập http://www.example.com/cache/$cache_key/* sẽ phân phối các tệp có tiêu đề bộ nhớ cache trong tương lai.Điều kiện đặt tiêu đề bộ nhớ cache trong apache

Tôi đang sử dụng quy tắc viết lại để đặt biến môi trường và sau đó cố gắng đặt tiêu đề kiểm soát bộ nhớ cache dựa trên biến đó. Tuy nhiên, có vẻ như biến đang được đặt quá muộn trong quá trình hoặc một cái gì đó; các quy tắc tiêu đề có điều kiện không bao giờ được thực thi.

RewriteRule ^cache/.*?/(.*) /$1 [env=asset:true,L] 
Header set Cache-control "max-age=30" 
Header set Cache-Control "max-age=31536000" env=asset 
Header unset ETag env=asset 

Có cách nào tốt hơn để thực hiện việc này không? Tôi đã thử một vài kết hợp của các khối Directory và Location mà không thành công.

Trả lời

19

Sử dụng phpinfo() Tôi đã xác định biến môi trường kết thúc không được đặt hoàn toàn theo yêu cầu được viết lại, do đó, vấn đề không phải là thứ tự của yêu cầu, có vẻ như để biến biến đó ra. Sử dụng chuỗi truy vấn thay vì URL và không phải viết lại dường như là cách duy nhất tôi có thể làm việc này. Tôi đồng ý, có vẻ như có nên là một cách tốt hơn.

RewriteCond %{QUERY_STRING} longcache=true(&|$) 
RewriteRule .* - [ENV=LONGCACHE:true,L] 

Header set Cache-Control "max-age=30" env=!LONGCACHE 
Header set Cache-Control "max-age=31536000" env=LONGCACHE 

THÊM ĐÁP KHÁC ĐƯỢC MẮT MỞ:

biến môi trường asset của bạn được đổi tên thành REDIRECT_asset sau khi chuyển hướng, vì vậy chỉ Tiêu đề có điều kiện của bạn cần phải:

Header set Cache-Control "max-age=31536000" env=REDIRECT_asset 
+1

Vâng, đó là nó, REDIRECT_asset, cảm ơn anh ấy. – regilero

+0

Cảm ơn bạn, bằng cách nào đó tôi đã bỏ lỡ điều này đã được trả lời. – mike

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