Câu hỏi Tại sao FileMatch này không khớp chính xác?


Chúng tôi đã cố gắng định cấu hình máy chủ của mình để không lưu các tệp .htm của chúng tôi vì nó đang gây ra một số vấn đề với gói phân tích của chúng tôi cũng như không hiển thị các trang chính xác nếu khách truy cập nhấp vào nút quay lại trong trình duyệt của họ.

Chúng tôi đã cố gắng giải quyết nó bằng cách thêm:

<FilesMatch "\.(htm)$">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
Header set Warning "Testing"
</FilesMatch>

vào tập tin httd của chúng tôi nhưng nó không xuất hiện để thực thi, tuy nhiên, khi chúng ta di chuyển các Header đặt bên ngoài FilesMatch nó xuất hiện để thực hiện tốt ..

Bất cứ ai có bất kỳ ý tưởng mà chúng tôi đang đi sai?


9
2018-05-23 16:08


gốc




Các câu trả lời:


Gần đây tôi cần tìm ra cùng một loại vấn đề và, mặc dù bài đăng này đã chỉ cho tôi đúng hướng, tôi muốn chia sẻ một số thông tin làm rõ cho việc chỉnh sửa những người tìm kiếm chủ đề này trong tương lai.

David, FileMatch ban đầu của bạn không hoạt động vì FilesMatch chỉ hoạt động trên các tệp thực, vật lý tồn tại trên hệ thống tệp của bạn. http://httpd.apache.org/docs/current/sections.html tuyên bố nó là:

Các Chỉ thị thư mục và tệp, cùng với các đối tác regex của họ, áp dụng các chỉ thị cho các phần của hệ thống tập tin.

Đây cũng là lý do khiến bài đăng thứ hai của bạn sử dụng LocationMatch giải quyết được vấn đề. Cũng từ http://httpd.apache.org/docs/current/sections.html, nó nói:

Các Chỉ thị vị trí và đối tác regex của nó, mặt khác, thay đổi cấu hình cho nội dung trong webspace. <SNIP> Chỉ thị không cần phải làm gì với hệ thống tập tin. Ví dụ, ví dụ sau đây cho thấy cách ánh xạ một URL cụ thể tới một trình xử lý HTTP HTTP Server bên trong được cung cấp bởi mod_status. Không có tệp nào được gọi là trạng thái máy chủ cần tồn tại trong hệ thống tệp.

<Location /server-status>
    SetHandler server-status
</Location>

Các Tài liệu Apache tóm tắt hành vi này với tuyên bố sau:

Sử dụng Vị trí để áp dụng chỉ thị cho nội dung sống bên ngoài hệ thống tệp. Đối với nội dung sống trong hệ thống tệp, hãy sử dụng Thư mục và Tệp. Ngoại lệ là <Location />, đây là một cách dễ dàng để   áp dụng cấu hình cho toàn bộ máy chủ.


Đối với những người muốn hiểu thêm về cơ chế, đây là cách tôi hiểu nội bộ:

  • Chỉ thị vị trí phù hợp dựa trên yêu cầu HTTP URI (ví dụ: example.com/này / là / a / uri.htm mà không có phần example.com).
  • Các chỉ thị thư mục và tệp, mặt khác, khớp dựa trên việc có một đường dẫn thư mục hoặc tệp trong hệ thống tệp của DocumentRoot khớp với phần tương ứng của URI yêu cầu HTTP

Các Tài liệu Apache tóm tắt hành vi này là:

Sử dụng gì khi

  Lựa chọn giữa các thùng chứa hệ thống tập tin và các thùng chứa webspace thực sự khá dễ dàng. Khi áp dụng chỉ thị cho các đối tượng cư trú trong hệ thống tệp luôn sử dụng Thư mục hoặc Tệp. Khi áp dụng chỉ thị cho các đối tượng không nằm trong hệ thống tệp (chẳng hạn như trang web được tạo từ cơ sở dữ liệu), sử dụng Vị trí.

  [QUAN TRỌNG!] Điều quan trọng là không bao giờ sử dụng Vị trí khi cố gắng hạn chế quyền truy cập vào các đối tượng trong hệ thống tệp. Điều này là do nhiều địa điểm webspace khác nhau (URL) có thể ánh xạ tới cùng một vị trí hệ thống tệp, cho phép các hạn chế của bạn bị phá vỡ.


11
2017-09-29 16:14



Cảm ơn LOT John và David. Tôi mất rất nhiều thời gian với điều này và một "chi tiết": nếu bạn có một Apache Webserver và sử dụng một "máy chủ ảo" trên nó, khi bạn chỉnh sửa etc / apache2 / sites-available / your_server.conf đang cố gắng sử dụng Files hoặc FilesMatch không có gì sẽ xảy ra. Bạn phải sử dụng Vị trí. - Peter


Vấn đề này hiện đã được giải quyết.

Để làm cho nó hoạt động, chúng tôi đã thay đổi từ việc sử dụng FilesMatch đến LocationMatch và bây giờ các tiêu đề đang được thiết lập hoàn hảo.

Chúng tôi tin rằng điều này là do trang đang được chuyển hướng từ trang JSP sang trang HTML.

<LocationMatch "\.(htm|html)$">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
Header set Warning "Testing"
</LocationMatch>

Hy vọng rằng những người khác sẽ thấy điều này hữu ích.


8
2018-05-24 12:48



Bạn là một anh hùng thuần khiết! - Bahadir Tasdemir