Score:0

เงื่อนไข Apache IF ตามส่วนหัว HTTP ที่กำหนดเอง

ธง cn

ฉันมีคำสั่ง RewriteRule ใน Apache ที่ฉันต้องการนำไปใช้ก็ต่อเมื่อมีส่วนหัว HTTP ที่กำหนดเองอยู่

สิ่งที่ฉันได้ลอง:

<If "%{HTTP:X-MyCustomHeader} in { 'present' }">
RewriteRule ^/$ /present.html [NC,R=301,L]
</If>
<Else>
RewriteRule ^/$ /absent.html [NC,R=301,L]
</Else>

การดำเนินการนี้ใช้ไม่ได้เลย และจะไม่นำ RewriteRule ไปใช้

ทางเลือกอื่นที่ฉันได้ลอง:

<If "-n req_novary('X-MyCustomHeader')">

ใช้งานไม่ได้เช่นกัน

ฉันกำลังทดสอบด้วย curl like

curl - คือ http://example.com/ -H X-MyCustomHeader:ปัจจุบัน

เพื่อตรวจสอบว่าส่วนหัวมีอยู่และมองเห็นได้ ฉันลองใช้ตัวแปร env:

SetEnvIf X-MyCustomHeader ^(ปัจจุบัน)$ MY_CUSTOM_VAR=$1
ส่วนหัวตั้งค่า X-MyCustomHeader "### FOUND ###" เสมอ env=MY_CUSTOM_VAR

วิธีนี้ได้ผลตามที่คาดไว้ และฉันได้รับคำตอบว่า FOUND

แต่อีกครั้งเมื่อฉันพยายามใช้ตัวแปร env ในคำสั่ง IF มันจะไม่ถูกทริกเกอร์ เช่น

<If "-n env('MY_CUSTOM_VAR')">

ฉันจะทำสิ่งนี้กับ IF ได้อย่างไร และใช่ ฉันรู้ว่ามีเงื่อนไข RewriteCond เพื่อตรวจสอบตัวแปรสภาพแวดล้อม แต่ฉันจำเป็นต้องใช้คำสั่งอื่นๆ ด้วย ดังนั้นฉันจึงอยากจะสลับมันในบล็อก IF

ตามเอกสาร: https://httpd.apache.org/docs/trunk/en/expr.html#functions

เมื่อมีการค้นหาตัวแปรสภาพแวดล้อมภายในเงื่อนไข สิ่งสำคัญคือต้องพิจารณาว่าการประมวลผลคำขอเร็วเกินไปเพียงใดที่การแก้ปัญหานี้จะเกิดขึ้น ตามแนวทางแล้ว คำสั่งใดๆ ที่กำหนดไว้นอกบริบทของโฮสต์เสมือน (ไดเร็กทอรี, ตำแหน่ง, htaccess) ไม่น่าจะมีโอกาสที่จะดำเนินการได้ SetEnvIf ในขอบเขตโฮสต์เสมือนเป็นหนึ่งคำสั่งที่ทำงานก่อนการแก้ปัญหานี้

ตามเอกสาร ตัวแปร SetEnvIf ควรใช้งานได้ แต่ไม่ทำงาน?

โพสต์คำตอบ

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