Apache ProxyPassRewrite ไม่ได้เขียนเนื้อหาการตอบสนองที่ได้รับจากhttp://test.example.comใหม่เพียงส่วนหัวเท่านั้น (เช่นเปลี่ยนเส้นทางไปยังหน้า 404 และอื่น ๆ )
ทางเลือกจำนวนมาก:
หนึ่ง ) เขียนแอปภายในเพื่อใช้เส้นทางสัมพัทธ์แทนสัมบูรณ์ เช่น../css/style.css
แทน/css/style.css
สอง ) ปรับใช้แอปภายในอีกครั้งในไดเรกทอรีย่อยเดียวกัน/folder
แทนที่จะอยู่ในรูทของ test.example.com
สาม ) หนึ่งและสองไม่น่าจะเกิดขึ้น ... หากคุณโชคดีแอปภายในใช้เฉพาะไดเรกทอรีย่อยสองหรือสามอันและไม่ได้ใช้ในไซต์หลักของคุณเพียงเขียนบรรทัด ProxyPass:
# Expose Internal App to the internet.
ProxyPass /externalpath/ http://test.example.com/
ProxyPassReverse /externalpath/ http://test.example.com/
# Internal app uses a bunch of absolute paths.
ProxyPass /css/ http://test.example.com/css/
ProxyPassReverse /css/ http://test.example.com/css/
ProxyPass /icons/ http://test.example.com/icons/
ProxyPassReverse /icons/ http://test.example.com/icons/
สี่ ) สร้างโดเมนย่อยแยกต่างหากสำหรับแอปภายในและย้อนกลับพร็อกซีทุกอย่าง
<VirtualHost *:80>
ServerName app.example.com/
# Expose Internal App to the internet.
ProxyPass / http://test.internal.example.com/
ProxyPassReverse / http://test.internal.example.com/
</VirtualHost>
ห้า ) บางครั้งนักพัฒนามี clueless อย่างสมบูรณ์และมีการใช้งานของพวกเขาไม่เพียง แต่สร้าง URL แน่นอน แต่ยังรวมถึงส่วนชื่อโฮสต์ใน URL ของพวกเขาและส่งผลให้รหัส HTML <img src=http://test.example.com/icons/logo.png>
ลักษณะเช่นนี้:
A ) คุณสามารถใช้โซลูชันคอมโบของ DNS horizon ที่แบ่งและสถานการณ์สมมติ 4 ทั้งผู้ใช้ภายในและภายนอกใช้ test.example.com แต่ DNS ภายในของคุณชี้ไปยังที่อยู่ ip ของเซิร์ฟเวอร์ test.example.com โดยตรง สำหรับผู้ใช้ภายนอกระเบียนสาธารณะสำหรับ test.example.com จะชี้ไปยังที่อยู่ ip ของเว็บเซิร์ฟเวอร์สาธารณะ www.example.com แล้วคุณสามารถใช้โซลูชัน 4 ได้
B ) คุณสามารถรับ apache ไปที่ไม่เพียง แต่ร้องขอพร็อกซีเพื่อทดสอบ example.com แต่ยังเขียนเนื้อหาการตอบกลับก่อนที่มันจะถูกส่งไปยังผู้ใช้ของคุณ (โดยปกติพร็อกซีจะเขียนเฉพาะส่วนหัว / การตอบกลับ HTTP เท่านั้น) mod_substitute ใน apache 2.2 ฉันยังไม่ได้ทดสอบว่ามันใช้งานได้ดีกับ mod_proxy แต่อาจใช้งานได้ดังต่อไปนี้
<Location /folder/>
ProxyPass http://test.example.com/
ProxyPassReverse http://test.example.com/
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|test.example.com/|www.example.com/folder/|i"
</Location>