Tại sao Apache không có tệp gss css hoặc js có tham số?


8

Một số tệp CSS & JS không được nén bởi apache khi bật mod_deflate. Các tệp này trông giống như "[domain.name] /aggregator.css? ..." hoặc "[domain.name] /misc/jquery.js? ..." trong YSlow. CSS & JS khác không có dấu "?" bị nén. Vui lòng giải thích cho tôi làm thế nào để tôi thực hiện apache nén các tập tin này.

Tôi đã thêm dòng sau vào tệp .htaccess

  <IfModule mod_deflate.c>
        <FilesMatch "\.(css|js|x?html?|php)$">
           SetOutputFilter DEFLATE
        </FilesMatch>
  </IfModule>

Cảm ơn

Câu trả lời:


5

Hrm, thú vị. Tôi không thể tái tạo điều này:

[root@dev ~]# cat /etc/httpd/conf.d/test.conf
<FilesMatch "\.txt$">
  SetOutputFilter DEFLATE
  Header set X-Ping "Pong"
</FilesMatch>

[root@dev ~]# GET -SedH 'Accept-Encoding: gzip, deflate' 'http://localhost/test.txt'
GET http://localhost/test.txt --> 200 OK
Content-Encoding: gzip
Content-Length: 2449
X-Ping: Pong

[root@dev ~]# GET -SedH 'Accept-Encoding: gzip, deflate' 'http://localhost/test.txt?foo'
GET http://localhost/test.txt?foo --> 200 OK
Content-Encoding: gzip
Content-Length: 2449
X-Ping: Pong

(loại bỏ các tiêu đề không liên quan)

Như đã đề cập ở trên, FilesMatchkhớp với các đường dẫn hệ thống tập tin , không phải URI. Là các tài nguyên không phải là các tệp được nén trên hệ thống tệp hoặc chúng được tạo ra một cách nhanh chóng, hoặc được ủy quyền hoặc được chuyển hướng hoặc một cái gì khác phá vỡ ánh xạ hệ thống URI trực tiếp đến tệp? Thay vào đó, bạn có thể thử sử dụng LocationMatch , đây có thể là một lựa chọn tốt hơn nếu bất kỳ phần nào trong ứng dụng của bạn không phải là tệp tĩnh.

<IfModule mod_deflate.c>
  <LocationMatch "\.(css|js|x?html?|php)$">
     SetOutputFilter DEFLATE
  </LocationMatch>
</IfModule>

Cảm ơn Mark đã trả lời. Giải pháp của bạn dường như đang làm việc.

Có thứ gì đó cần được kích hoạt để LocationMatch hoạt động không? Tôi đã thử sử dụng giải pháp này và nó gây ra lỗi nội bộ nhưng FileMatch hoạt động ...
Paul Sheldrake

Không, chúng đều là một phần của lõi máy chủ. Mở một câu hỏi khác với đoạn cấu hình của bạn và thông báo lỗi và chúng tôi sẽ xem xét.
markdrayton

1
+1 cho Header đặt X-Ping "Pong"
Eddie B

Liệu bộ đệm này đáp ứng hoặc nó sẽ gzip trong mỗi yêu cầu tiếp theo vào cùng một tệp js / css?
amit patel

0

$ Ở cuối biểu thức chính quy của bạn sẽ khớp với cuối URL, vì vậy nếu có bất cứ điều gì sau phần mở rộng tệp, nó sẽ không khớp. Bạn có thể bỏ qua $ nhưng sau đó nó sẽ khớp nếu có ".css", v.v. bất cứ nơi nào trong URL. Một cái gì đó như ví dụ dưới đây có thể an toàn hơn. Điều này phải khớp với ".css" ở cuối URL hoặc ".css" theo sau ?, Một số tham số và sau đó là cuối URL.

   <IfModule mod_deflate.c>
        <FilesMatch "\.(css|js|x?html?|php)($|\?.*$)">
           SetOutputFilter DEFLATE
        </FilesMatch>
   </IfModule>

1
Tôi không nghĩ đó là chính xác. FilesMatch khớp với tên tệp của hệ thống tệp, không phải là URI. LocationMatch khớp với các URI (nhưng thậm chí chỉ nhìn vào URI chứ không phải chuỗi truy vấn).
markdrayton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.