2013-05-25 23 views
10

Tôi có một số thư mục có nội dung sẽ không bao giờ thay đổi.Apache: đặt độ tuổi tối đa hoặc hết hạn bằng .htaccess cho thư mục

Có thể tạo tệp .htaccess cho trình duyệt biết mọi thứ trong thư mục này và thư mục con có thể được lưu trong một thời gian dài không?

Tôi muốn sao chép cùng một tệp .htaccess trong mỗi thư mục nếu có thể.

Nếu điều này có thể, bạn có đề xuất độ tuổi tối đa vượt quá hạn hoặc cả hai?

Trả lời

19

Vì vậy, nó trông càng tốt .... cú pháp tập tin .htaccess là:

Header unset Last-Modified 
FileETag none 
ExpiresActive On 
ExpiresDefault "access plus 1 years" 

này sẽ tắt ETags và bật Cache-Control: max-age

Sau đó đặt này. file .htaccess trong thư mục và tất cả các file (bao gồm cả đó là thư mục con sẽ được lưu trữ trong vòng 1 năm.

tôi quyết định đặt tất cả nội dung bộ nhớ cache có thể tôi dưới một thư mục gốc duy nhất và chỉnh sửa httpd.conf như

<Directory "C:\somedir\cache"> 
    Header unset Last-Modified 
    FileETag none 
    ExpiresActive On 
    ExpiresDefault "access plus 1 years" 
</Directory> 

Tôi vẫn đang trong quá trình thử nghiệm điều này. Tôi chỉ hy vọng điều này không tắt Etags cho phần còn lại của trang web. Cho đến nay có vẻ như nó đang hoạt động như kế hoạch.


UPDATE (sau 6 tháng):

Thiết lập ExpiresDefault và cho phép e-thẻ là điều tốt nhất để làm.

trong httpd.conf:

<Directory "C:\somedir\cache"> 
    ExpiresActive On 
    ExpiresDefault "access plus 1 year" 
</Directory> 

Hãy chắc chắn rằng "somedir" là bên trong thư mục gốc apache (như htdocs).

Cho phép thẻ điện tử là tốt vì sau 1 năm, trình duyệt sẽ xác thực lại tệp bằng cách chuyển thẻ điện tử. Máy chủ web sẽ gửi lại 304 - Không được sửa đổi và đặt lại độ tuổi tối đa thành 1 năm. Điều này rất hiệu quả.

Tất cả trong tất cả, bạn có thể xem tệp nhật ký apache và thấy rằng các mục trong/cache dir được bắt đầu được phân phát một lần.

Lưu ý: Tôi thấy rằng cài đặt Header append Cache-Control "public" là ok nếu bạn muốn.


Version cuối cùng:

Dưới đây là phiên bản cuối cùng: (chỉ cần thêm này ở dưới cùng của httd.conf)

<Directory "C:\somedir\cache""> 
    ExpiresActive On 
    ExpiresDefault "access plus 1 year" 
    Header append Cache-Control "public" 
</Directory> 

Kiểm tra header nên tiết lộ này:

Accept-Ranges:bytes 
Cache-Control:max-age=31536000, public 
Connection:Keep-Alive 
Content-Language:en 
Content-Length:746 
Content-Type:text/css 
Date:Thu, 29 May 2014 15:23:50 GMT 
ETag:"240000000add63-2ea-4f4086d72ad01" 
Expires:Fri, 29 May 2015 15:23:50 GMT 
Keep-Alive:timeout=40, max=200 
Last-Modified:Fri, 07 Mar 2014 18:28:59 GMT 

này sẽ:

  1. Đặt max-age trong vòng 1 năm (dài nhất đề nghị)
  2. Gửi hết hạn thẻ 1 năm
  3. Gửi Etag, vì vậy sau 1 năm trình duyệt sẽ thực hiện xác thực etag
  4. Cho phép các thiết bị/dịch vụ lưu bộ nhớ đệm trung gian biết rằng chúng có thể lưu trữ tệp trong 1 năm.
2

FYI, nếu bạn làm những gì được đề cập ở trên và Apache của bạn sẽ không khởi động lại sau đó bạn có thể nhận được lỗi này:

The Apache service named reported the following error: 
>>> Invalid command 'ExpiresActive', perhaps misspelled or defined by a module not included in the server configuration. 

Bạn có thể tìm lỗi mà bằng cách nhấn vào "Start", gõ vào "Quản lý máy tính", khởi chạy nó, trong cây mở "Event Viewer -> Windows Logs -> Application". Đó là nơi tôi đã tìm thấy lỗi ở trên.

Dễ dàng sửa chữa, chỉ cần bỏ ghi chú dòng này trong httpd.conf:

#LoadModule expires_module modules/mod_expires.so 
Các vấn đề liên quan