2011-12-15 35 views
8

Tôi đã nhập thông tin sau vào tệp ".htacces" của mình để bắt đầu lưu vào bộ nhớ cache Nội dung web. Theo Google Page Speed ​​và Yslow, các trang vẫn chưa được lưu trong bộ nhớ cache. Các mô-đun có sai không? Hay là các ứng dụng không hiển thị chính xác dữ liệu?htaccess caching không hoạt động

trang web đang chạy trên Apache 2.0 trên Server

.htaccess (phần với các module bộ nhớ đệm):

# Expire headers 
<ifModule mod_expires.c> 
  ExpiresActive On 
  ExpiresDefault "access plus 1 seconds" 
  ExpiresByType image/x-icon "access plus 2592000 seconds" 
  ExpiresByType image/jpeg "access plus 2592000 seconds" 
  ExpiresByType image/png "access plus 2592000 seconds" 
  ExpiresByType image/gif "access plus 2592000 seconds" 
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" 
  ExpiresByType text/css "access plus 604800 seconds" 
  ExpiresByType text/javascript "access plus 216000 seconds" 
  ExpiresByType application/javascript "access plus 216000 seconds" 
  ExpiresByType application/x-javascript "access plus 216000 seconds" 
  ExpiresByType text/html "access plus 600 seconds" 
  ExpiresByType application/xhtml+xml "access plus 600 seconds" 
</ifModule> 
  
# Cache-Control Headers 
<ifModule mod_headers.c> 
#month 
  <filesMatch "\.(ico|jpe?g|png|gif|swf)$"> 
    Header set Cache-Control "max-age=2592000, public" 
  </filesMatch> 
#week 
  <filesMatch "\.(css|js)$"> 
    Header set Cache-Control "max-age=604800, public" 
  </filesMatch> 
#day 
  <filesMatch "\.(x?html?|php)$"> 
    Header set Cache-Control "max-age=43200, private, must-revalidate" 
  </filesMatch> 
</ifModule> 
# END Cache-Control Headers 
  
# Turn ETags Off 
<ifModule mod_headers.c> 
  Header unset ETag 
</ifModule> 
FileETag None 
  
# Remove Last-Modified Header 
<ifModule mod_headers.c> 
  Header unset Last-Modified 
</ifModule> 
+0

Kiểm tra các tiêu đề hết hạn đã gửi. Sử dụng công cụ nhà phát triển Chrome hoặc tab net trong firebug. Có thể là htaccess là vô hiệu hóa, hoặc mod_expires đó không được kích hoạt. – Gerben

Trả lời

19

Đi vào httpd.conf và tìm kiếm dòng mod_expires, nó không nên được nhận xét ra. Hãy tìm dòng mod_headers và đảm bảo rằng nó không được nhận xét. Hoặc không (không phải cho một ứng dụng quan trọng) có một thử nghiệm dễ dàng và bẩn: loại bỏ <ifModule mod_expires.c></ifModule> để nguyên công cụ ở giữa, tương tự cho <ifModule mod_headers.c> và nếu máy chủ của bạn không thành công với 500 Lỗi máy chủ internet thì có thể bạn bị thiếu hoặc cả hai của các mô-đun đó và chúng không được kích hoạt. Nếu vậy thì hãy vào httpd.conf và kích hoạt những gì bạn cần.

Bạn cũng có thể kiểm tra tiêu đề phản hồi của trang web bằng cách sử dụng công cụ như REDbot. Chỉ cần chọn một URL tài nguyên như một URL trỏ đến hình ảnh và dán nó vào công cụ để xem tiêu đề nào được gửi lại cùng với một số đề xuất. Lưu ý rằng nó tuân theo các quy tắc robots.txt của miền và sẽ không kiểm tra tài nguyên nếu nó không được phép.

Và như Gerben đã nói, sử dụng tab net trong firefox, công cụ chrome dev hoặc một số công cụ phát triển web tương đương giúp xem tiêu đề nào đang được gửi và nhận.

Bạn cũng không cần đặt Cache-Control public. Và bạn không cần sử dụng max age nếu bạn cũng đang sử dụng các cuộc gọi ExpiresByType.

Để biết thêm thông đọc hướng dẫn tuyệt vời này: http://www.mnot.net/cache_docs/

Và tìm hiểu bằng ví dụ: thanh toán như thế nào nó được thực hiện trong html5-boilerplate tại https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess

Đối với ví dụ máy chủ cấu hình phổ biến khác như lighthttpd, Node.js, Nginx, vv . xem: https://github.com/h5bp/server-configs

+0

Ví dụ html5-boilerplate mà @Anthony liên kết đến ở cuối bài đăng này khá hữu ích. Ví dụ, tôi đã viết 'jpg' thay vì' jpeg'. Cảm ơn vì điều đó! –

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