ความแตกต่างระหว่าง“ การเปลี่ยนเส้นทางถาวร” กับ mod_rewrite RewriteRule


9

นี่คือเซิร์ฟเวอร์ Apache httpd 2.2

เราต้องการให้ HTTPS เข้าถึงเซิร์ฟเวอร์นี้เพื่อเข้ารหัส

เมื่อลูกค้าเว็บเยี่ยมชมเว็บไซต์ของฉันที่http://www.example.org/ $ foo (พอร์ต 80) ฉันต้องการเปลี่ยนเส้นทางคำขอไปยังเว็บไซต์ที่เข้ารหัส HTTPS ที่https://www.example.org/ $ foo

ดูเหมือนจะมีสองวิธีทั่วไปในการทำเช่นนี้:

วิธีแรกใช้คำสั่ง ' เปลี่ยนเส้นทาง ' จาก mod_alias:

<VirtualHost *:80>
    Redirect permanent / https://www.example.org/
</VirtualHost>

วิธีที่สองใช้ mod_rewrite:

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

อะไรคือความแตกต่างระหว่าง "การเปลี่ยนเส้นทางถาวร" และ mod_rewrite stanza เป็นคนหนึ่งที่ดีกว่าคนอื่น ๆ ?

คำตอบ:


8

โดยค่าเริ่มต้น mod_rewrite จะทำการเปลี่ยนเส้นทาง "302 Found" ซึ่งเป็นการชั่วคราว ทุกอย่างสมมติอื่นเท่ากันจะเทียบเท่ากับRedirect permanentRewriteRule <blah> [R=permanent]


ที่จริงแล้วRedirectDirective handle จะเปลี่ยนเส้นทางจาก http ไปยัง https ดีขึ้น ดูความคิดเห็นของ Stefan ด้านล่างและตรวจสอบเอกสารของ Apache ในหัวข้อนี้: httpd.apache.org/docs/current/rewrite/avoid.html#redirect
Gondy

7

เป็นคนหนึ่งที่ดีกว่าคนอื่น ๆ ?

Apache ตอนนี้แนะนำให้ใช้ของRedirectจากmod_aliasแทนการใช้จากRewriteRule mod_rewriteดูhttps://httpd.apache.org/docs/current/rewrite/avoid.html#redirectซึ่งพูดว่า:

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


5

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


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