Phá vỡ một dòng dài trong tệp .htaccess


10

Tôi đang đặt tiêu đề Chính sách bảo mật nội dung trong tệp .htaccess của mình và nó đã phát triển thành một dòng đơn cực kỳ dài, rất khó quản lý. Có cách nào để chia dòng này thành các chuỗi con dễ quản lý hơn không?

Như một ví dụ tầm thường, giả sử tôi đang đặt tiêu đề như

Header set Content-Security-Policy "deafult-src http://domainA.com; script-src http://domainB.com"

Tôi có thể (không có vấn đề phá vỡ rõ ràng) hoàn thành trường hợp cụ thể của mình với một cái gì đó như

Header append Content-Security-Policy "default-src http://domainA.com;"
Header append Content-Security-Policy "script-src http://domainB.com"

nhưng điều đó sẽ chèn dấu phẩy vào chuỗi, vì vậy tôi vẫn tò mò liệu có câu trả lời nào tốt hơn có thể được áp dụng chung hay không, mà không cần thêm ký tự bổ sung vào phản hồi.

Điều lý tưởng là nếu có một số ký tự nối mà tôi có thể sử dụng để ngắt chuỗi thành các phần nhỏ hơn, như

Header set Content-Security-Policy "default-src http://domainA.com;"
\" script-src http://domainB.com"

hoặc là

Header set Content-Security-Policy "default-src http://domainA.com;"^
" script-src http://domainB.com"

hoặc là

Header set Content-Security-Policy "default-src http://domainA.com;"
+" script-src http://domainB.com"

Ngoài ra, nếu tôi có thể đặt một số loại biến và chỉ cần bỏ nội dung của chúng để làm một cái gì đó như

a="default-src http://domainA.com;"
b=" script-src http://domainB.com"
Header set Content-Security-Policy $a$b

điều đó cũng sẽ dễ quản lý hơn nhiều

Có một chủ đề tương tự được đưa ra cho nginx và kết luận chỉ là sống với những hàng dài (họ đang xử lý một regex dài, vì vậy giải pháp chắp thêm sẽ không hiệu quả); Đó có phải là trường hợp của Apache không?


Giữ phím shift và nhấn enter sau mỗi lần thay thế của bạn sẽ thực hiện thủ thuật?
StixO

@StixO Không, vấn đề này liên quan đến cách apache phân tích chuỗi trong các tệp conf. Thông thường, các biên tập viên (thường là HTML) sẽ sử dụng một phím tắt như vậy để phân biệt giữa ngắt dòng (giả sử, <br />) và ngắt đoạn (</ p>). Điều này sẽ phụ thuộc vào định dạng đánh dấu được phân tích cú pháp và trình chỉnh sửa. Các tệp conf của Apache là văn bản thuần túy và do đó không có sự khác biệt giữa một dòng một đoạn văn (bất kể công cụ sửa đổi, enter tạo ra một ký tự trả về vận chuyển phụ thuộc vào hệ thống, như \ n hoặc \ r).
MaxPRafferty 2/2/2016

Câu trả lời:


14

Sau đây nên làm việc:

 Header set Content-Security-Policy "default-src http://domainA.com; \
      script-src http://domainB.com"

Tôi đã thử nghiệm điều này và đã nhận được Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration.
kasperd

1
@kasperd bạn cần chạya2enmod headers
MaxPRafferty 27/1/2016

@BazzaDP Thú vị! Tôi hy vọng rằng điều này sẽ khiến máy chủ gửi một dòng mới thoát, nhưng có vẻ như nó phù hợp với cách tôi muốn, và không thể chấp nhận được từ quan điểm của khách hàng.
MaxPRafferty

1
Wow, thực sự, rõ ràng bạn có thể thoát khỏi bất kỳ nhân vật khoảng trắng nào theo cách này. Xác nhận làm việc với \ <tab> là tốt. .htaccess sẽ không bao giờ có vẻ tốt như vậy!
MaxPRafferty

1
Huh, thậm chí làm việc để chia tay regex! @BazzaDP, bạn có thể muốn bỏ câu trả lời này cho câu hỏi nginx mà tôi đã đề cập, cũng có thể hoạt động ở đó.
MaxPRafferty

5

Có - dấu gạch chéo ngược hoạt động như một dòng tiếp tục . Điều này được chôn trong tài liệu Apache 2.4 trên [ https://httpd.apache.org/docs/2.4/configuring.html#page-header]

Các quy tắc quan trọng:

  1. Khoảng trắng trong một dòng là tốt, tức là. bất kỳ số lượng tab và không gian;
  2. Ký tự cuối cùng trên tất cả các dòng trừ ký tự cuối cùng phải là dấu gạch chéo ngược; <
  3. Dòng cuối cùng không được kết thúc bằng dấu gạch chéo ngược;
  4. Không thể sử dụng ký tự nhận xét Apache (#) để nhận xét một dòng.

Nếu các quy tắc này không được tuân theo, máy chủ sẽ phản hồi với Lỗi 500.

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.