ลำดับที่ถูกต้องของกฎการเขียนซ้ำในไฟล์ htaccess

ฉันจำเป็นต้องมี:

http://www.example.com/v1/my-project/ ถูกเปลี่ยนเส้นทาง ถึง http://example.com/my-project/

so :

(1) ลบ www ออกจาก http_host

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

(2) ลบส่วน 'v1/' ของ request_uri

RewriteCond %{REQUEST_URI} ^/v1/(.*)$ [NC]
RewriteRule . %1 [R=301,L]

(3) ฉันต้องการเปลี่ยนเส้นทางทั้งหมด 404 ไปที่หน้าแรกด้วย

ErrorDocument 404 /

(4) สุดท้ายนี้ เอกสารทั้งหมดของฉันจริงๆ แล้วอยู่ในโฟลเดอร์ "v2/" ซึ่งโฮสต์เว็บไซต์ที่ใช้งานอยู่ในปัจจุบัน แต่ฉันไม่ต้องการให้ "v2" ใน url เพียงแค่ "/"

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule ^(.*)$ /v2/$1 [NC,L]

นี่คือกฎของฉัน คำถามของฉันคือ: ฉันไม่ได้จัดการ (2): มันจะถูกเปลี่ยนเส้นทางไปที่ / (เนื่องจากกฎ (3) ฉันเดา ฉันคิดว่าลำดับของกฎของฉันต้องผิดพลาด แต่ดูเหมือนว่าฉันไม่สามารถทำให้ถูกต้องได้ สามารถ คุณช่วยไหม?


person pixeline    schedule 10.07.2009    source แหล่งที่มา


คำตอบ (2)


"กฎข้อที่ 3" ไม่ใช่กฎเลย และลำดับของมันที่เกี่ยวข้องกับ RewriteRules ของคุณก็ไม่สำคัญ กฎข้อที่ 2 ล้มเหลวด้วยเหตุผลอื่นบางประการ ฉันไม่แน่ใจว่าจะแก้ปัญหาของคุณหรือไม่ แต่ฉันจะทำให้กฎของคุณง่ายขึ้นบ้างโดยเขียนดังนี้:

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule (.*) http://example.com/$1 [R=301,L]

RewriteRule ^v1/(.*) /$1 [R=301,L,NC]

RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule (.*) /v2/$1 [NC,L]
person chaos    schedule 10.07.2009

ขั้นแรกคุณควรเขียนกฎใดๆ ที่ทำให้เกิดการเปลี่ยนเส้นทางภายนอก (แฟล็ก R) จากนั้นจึงเขียนกฎอื่นๆ มิฉะนั้น สามารถใช้ URL ที่เขียนใหม่แล้วสำหรับการเปลี่ยนเส้นทางภายนอกได้ แม้ว่าจะมีไว้สำหรับการเปลี่ยนเส้นทางภายในก็ตาม

ดังนั้น ฉันจะไม่เปลี่ยนแปลงลำดับที่คุณมีในตอนนี้

person Gumbo    schedule 10.07.2009