แยกแถวยาวในไฟล์. htaccess


10

ฉันกำลังตั้งค่าส่วนหัวของ Content-Security-Policy ในไฟล์. htaccess ของฉันและมันได้กลายเป็นบรรทัดเดียวที่ยาวมากซึ่งเป็นเรื่องที่ต้องจัดการ มีวิธีในการแยกบรรทัดนี้เป็นวัสดุย่อยที่จัดการได้มากขึ้นหรือไม่?

เป็นตัวอย่างเล็ก ๆ น้อย ๆ ว่าฉันกำลังตั้งส่วนหัวเช่น

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

ฉันสามารถ (โดยไม่มีปัญหาในการทำลายที่เห็นได้ชัด) ทำกรณีเฉพาะของฉันด้วยสิ่งที่ชอบ

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

แต่นั่นจะเป็นการใส่เครื่องหมายจุลภาคลงในสายอักขระดังนั้นฉันก็ยังสงสัยว่าถ้ามีคำตอบที่ดีกว่าที่สามารถใช้ได้โดยทั่วไปโดยไม่ต้องเพิ่มตัวอักษรเพิ่มเติมลงในการตอบกลับ

สิ่งที่จะเหมาะคือถ้ามีตัวละครเรียงต่อกันที่ฉันสามารถใช้เพื่อแยกสตริงออกเป็นส่วนเล็ก ๆ เช่น

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

หรือ

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

หรือ

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

อีกทางหนึ่งถ้าฉันสามารถตั้งค่าตัวแปรบางอย่างและเพียงแค่ทิ้งเนื้อหาของพวกเขาเพื่อทำสิ่งที่ต้องการ

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

ที่จะจัดการได้มากขึ้นเช่นกัน

มีหัวข้อที่คล้ายกันซึ่งเกิดขึ้นสำหรับ nginxและข้อสรุปก็คือการใช้ชีวิตอยู่กับสายยาว จะเป็นเช่นนั้นสำหรับ Apache ด้วยหรือไม่


การกดปุ่ม Shift ค้างไว้และกด Enter หลังจากที่แต่ละสตริงย่อยทำเคล็ดลับแล้ว
StixO

@StixO ไม่ปัญหานี้เกี่ยวข้องกับวิธีที่ apache วิเคราะห์สตริงในไฟล์ conf โดยทั่วไป (ปกติแล้ว HTML) ผู้แก้ไขจะใช้ทางลัดดังกล่าวเพื่อแยกความแตกต่างระหว่างตัวแบ่งบรรทัด (พูด <br />) และตัวแบ่งย่อหน้า (</p>) สิ่งนี้จะขึ้นอยู่กับรูปแบบมาร์กอัพที่ถูกวิเคราะห์คำและตัวแก้ไข ไฟล์ Apache conf เป็นข้อความล้วนและไม่มีความแตกต่างระหว่างบรรทัดในย่อหน้า (ไม่ว่าจะมีการปรับแก้หรือไม่ก็ตาม) enter จะสร้างอักขระขึ้นบรรทัดใหม่ที่ขึ้นอยู่กับระบบเช่น \ n หรือ \ r
MaxPRafferty

คำตอบ:


14

ต่อไปนี้ควรทำงาน:

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

Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configurationผมทดสอบนี้และมี
kasperd

1
@kasperd คุณต้องวิ่งa2enmod headers
MaxPRafferty

@BazzaDP น่าสนใจ! ฉันคาดหวังว่าสิ่งนี้จะทำให้เซิร์ฟเวอร์ส่งบรรทัดใหม่ที่หลบหนี แต่ดูเหมือนว่าจะสอดคล้องกับวิธีที่ฉันต้องการและมองไม่เห็นจากมุมมองของลูกค้า
MaxPRafferty

1
ว้าวจริงๆแล้วคุณสามารถหลบหนีจากช่องว่างใด ๆ ในลักษณะนี้ได้ ยืนยันการทำงานกับ \ <tab> เช่นกัน . htaccess จะไม่เคยดูดีเลย!
MaxPRafferty

1
อืมทำงานได้แม้จะเลิก regex! @BazzaDP คุณอาจต้องการวางคำตอบนี้สำหรับคำถาม nginx ที่ฉันพูดถึงด้วยอาจใช้งานได้เช่นกัน
MaxPRafferty

5

ใช่ - เครื่องหมายทำงานเป็นเส้นต่อเนื่อง สิ่งนี้ถูกฝังอยู่ภายในเอกสาร Apache 2.4 ใน [ https://httpd.apache.org/docs/2.4/configuring.html#page-header]

กฎสำคัญ:

  1. ช่องว่างภายในบรรทัดนั้นใช้ได้เช่น จำนวนแท็บและช่องว่างใด ๆ
  2. อักขระตัวสุดท้ายในทุกบรรทัดยกเว้นตัวสุดท้ายจะต้องเป็นแบ็กสแลช;
  3. บรรทัดสุดท้ายต้องไม่ยุติด้วยแบ็กสแลช
  4. ไม่สามารถใช้อักขระความคิดเห็น Apache (#) เพื่อใส่เครื่องหมายบรรทัด

หากไม่ปฏิบัติตามกฎเหล่านี้เซิร์ฟเวอร์จะตอบกลับด้วยข้อผิดพลาด 500

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.