mod_headers ไม่ส่งส่วนหัวเมื่อไฟล์เป็น PHP


9

ฉันได้ตั้งค่าไฟล์. htaccess เป็นค่าต่อไปนี้:

 Header set MyHeader "I'm Set!"

หากฉันไปที่ไดเรกทอรีนั้น ( http://example.com/test/) ซึ่งไม่มีไฟล์ดัชนีเริ่มต้นและดูกิจกรรมเครือข่าย (ในกรณีนี้ด้วย Chrome) ฉันจะเห็นว่าส่วนหัวกำลังถูกส่ง หากฉันไปที่ไฟล์ php ( http://example.com/test/test.php) ส่วนหัวจะไม่ถูกส่ง

ฉันได้สร้าง index.html (โดยมี<pre>Hiเนื้อหาเหมือนกัน) และได้รับการส่ง ฉันเปลี่ยนชื่อไฟล์เป็น.phpไม่มีส่วนหัว ถ้าฉันเปลี่ยน orignal test.phpเป็นtest.htmlมันจะแสดงผลรหัสขยะและส่วนหัวจะถูกส่ง หากฉันเปลี่ยนtest.phpเป็นtest.pngฉันจะได้รับไอคอนรูปภาพที่เสียหายและส่วนหัวจะถูกส่ง

ดังนั้นหากไม่มีการทดสอบนอกเหนือจากด้านบนในแง่ของ mime-type และนามสกุลไฟล์จะปรากฏเฉพาะ.phpไฟล์ (legit หรืออย่างอื่น) ที่ตั้งค่าเป็นไม่มี. htaccess ใช้กฎหรือคำสั่ง mod_headers โดยเฉพาะ แต่ฉันไม่ทราบวิธีทดสอบสิ่งนี้และเนื่องจากเป็นเซิร์ฟเวอร์ที่ใช้ร่วมกันฉันจึงไม่httpd.confสามารถเข้าใช้งานได้

ความคิดใด ๆ เกี่ยวกับสาเหตุที่ Apache จะข้ามการส่งส่วนหัวสำหรับไฟล์ php?

ฉันยังลอง:

 <FilesMatch "\.(php)$">
     Header set MyHeader "I'm Set!"
 </FilesMatch>

การอัปเดตจาก PHP / CGI เป็น PHP / FastCGI ดูเหมือนว่าได้ทำการแก้ไขแล้ว ฉันยังคงกระตือรือร้นที่จะรับข้อเสนอแนะถ้าใครรู้ว่าสาเหตุของมันคืออะไร
แอนโธนี

1
แอนโทนี่, คุณใช้ mod_fastcgi หรือไม่? ฉันพบกับพฤติกรรมที่เหมือนกันและดูเหมือนว่า mod_fastcgi จะแบ่งการทำงานของ mod_headers ฉันโพสต์รายงานข้อผิดพลาดเมื่อวานนี้: bugs.launchpad.net/ubuntu/+source/libapache-mod-fastcgi/+bug/…
Onkeltem

เหมือนกันที่นี่: / ข่าวใด ๆ หรือวิธีแก้ปัญหาที่? ฉันไม่สามารถจินตนาการได้ว่านี่ไม่ใช่ปัญหาในกรณีอื่น ๆ อีกแล้ว ...
Adrian Föder

คำตอบ:


4

นี่เป็นลักษณะการทำงานที่คาดไว้เมื่อเรียกใช้สคริปต์ CGI จากmod_headers docsเวอร์ชันล่าสุด (2.4) :

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

[... ]
คุณกำลังแก้ไขหรือลบส่วนหัวที่สร้างโดยสคริปต์ CGI ซึ่งในกรณีนี้สคริปต์ CGI จะอยู่ในตารางที่สอดคล้องกับเสมอและไม่อยู่ในตารางเริ่มต้น

ปัญหาเดิม (ที่มีอาจจะเป็นคำอธิบายที่ดีกว่า) อยู่ในBug 49308


หากฉันอ่านอย่างถูกต้องการใช้Header always set MyHeader "I'm Set!"ควรแก้ไขปัญหาได้ ฉันคิดว่าฉันพบคำตอบที่มีคนแนะนำและมันก็ไม่ได้ผลสำหรับ OP ในกรณีนั้นเช่นกัน แต่ฉันก็ค่อนข้างแน่ใจว่าพวกเขาบอกว่าจะลองHeader set alwaysซึ่งอาจเป็นสาเหตุว่าทำไมข้อเสนอแนะนั้นล้มเหลว
แอนโธนี

ไม่ฉันจะเอามันกลับมา ฉัน Ctrl-z'd Header always setพยายามที่และมันก็เป็น ฉันแค่อ่านคำพูดผิด ๆ ?
แอนโธนี

ในคำถามดั้งเดิมของคุณคุณไม่ได้ระบุไว้ คุณแน่ใจเหรอ มันควรจะเป็นสิ่งที่Header always set MyHeader "I'm Set!"ตามตัวอย่างของคุณ
แอนดรูว์เอ็ม

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