Apache สามารถทำการเขียนซ้ำจากส่วนหัว http แบบกำหนดเองได้ตามเงื่อนไขหรือไม่


12

ฉันมีเซิร์ฟเวอร์ apache ที่อยู่เบื้องหลัง load balancer (amazon แบบง่าย) ฉันต้องการเปลี่ยนเส้นทางการรับส่งข้อมูลใด ๆ ที่ไม่ใช่ 443 ถึง 443 ฉันต้องการให้ใช้ apache โฮสต์เสมือนเพียงโฮสต์เดียว ดังนั้นฉันจึงพยายามตรวจสอบว่าหากส่วนหัว HTTP_X_FORWARDED_PORT ไม่ใช่ 443

ฉันตรวจสอบRewriteCond docsแล้วและใช้ได้กับส่วนหัว HTTP ที่ จำกัด เท่านั้น

โดยพื้นฐานแล้วสิ่งที่ฉันทำคือ:

<VirtualHost *:80>
        ServerName www.example.com

        RewriteEngine On
        RewriteCond %{HTTP_X_FORWARDED_PORT} !=443
        RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

        ....
</VirtualHost>

แต่ RewriteCond ไม่รู้จัก HTTP_X_FORWARDED_PORT

มีวิธีอื่นอีกไหมในการทำสิ่งนี้ให้สำเร็จ (ด้วย VirtualHost เพียงอันเดียว)? (การตรวจสอบส่วนหัวที่เข้ามาบางประเภท)

ขอบคุณแลนซ์

คำตอบ:


13

RewriteCondเอกสารอีกเล็กน้อย:

%{HTTP:header}ซึ่งส่วนหัวสามารถเป็นชื่อส่วนหัว HTTP MIME ใด ๆ

ดังนั้นคุณสามารถทำได้ไม่เพียง แต่อยู่ในรูปแบบเดียวกับส่วนหัวที่สกัดไว้ล่วงหน้า

ลองสิ่งนี้:

RewriteCond %{HTTP:X-Forwarded-Port} !=443
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

1
อีกตัวอย่างหนึ่งที่มีที่อยู่ IP ในส่วนหัวที่ส่งผ่านโดย SiteLock CDN:RewriteCond %{HTTP:X-Forwarded-For} !=123.45.67.89
Liam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.