Apache2 และเขียนแผนที่ใหม่ - พยายามหลายชั่วโมง


1

ฉันติดอยู่กับปัญหาการเขียนใหม่แผนที่

สิ่งที่ฉันต้องการจะทำคือเปลี่ยนเส้นทาง URL เก่าแก่นับพันไปยัง URL ใหม่ ฉันจะสร้างแผนที่ด้วยตนเอง แต่ฉันต้องการรหัสนี้ในการทำงาน

RewriteCond %{HTTP_HOST}%{REQUEST_URI}\?%{QUERY_STRING} (^example\.com.abcd.cat_4)(.*)
RewriteRule .* ${url_rewrite_map:$1|NOTFOUND}? [R=301,L]

ฉันต้องการแผนที่เพื่อเป็นแบบนี้:

example.com/abcd/cat_4 http://example.com/345_exact_address_of_page

URL เก่ามีลักษณะดังนี้:

http://example.com/abcd/cat_4=0?Xi4B7WoN;;54

และฉันต้องการให้พวกเขาเขียนใหม่เป็น:

http://example.com/345_exact_address_of_page

ฉันลองหลาย ๆ อย่างแล้ว แต่ฉันไม่สามารถทำงานได้ ... คุณช่วยฉันได้ไหม

คำตอบ:


1

คุณใช้ $ 1 เป็นคีย์ค้นหาในแผนที่ของคุณ แต่พารามิเตอร์นั้นเก็บสิ่งที่คุณจับไว้ใน RewriteRule สตริงที่คุณจับใน RewriteCond ของคุณจะถูกจับใน% 1,% 2 ฯลฯ ...

ดังนั้นคุณควรใช้บางสิ่งตามแนวของ:

RewriteCond %{HTTP_HOST}   (^example\.com)
RewriteCond %{REQUEST_URI} (/abcd/cat_4)
RewriteRule .* ${url_rewrite_map:%1%2|NOTFOUND} [R=301,L]

1

โอเคฉันทำให้มันทำงานได้ สำหรับคนอื่น ๆ นี่คือทางออก

RewriteCond %{HTTP_HOST}%{REQUEST_URI}\?%{QUERY_STRING} (^example\.com.abcd.abcd=.*)
RewriteRule .* ${url_rewrite_map:%1|$1}? [R=301,L]

เพื่อตอบคำตอบของ Krist van Besien: ฉันเชื่อว่าคุณไม่สามารถใช้% 1% 2% 3 เป็นการใช้หนึ่งบรรทัดก่อนสองบรรทัดก่อนหน้า ฯลฯ % n หมายถึงเฉพาะสาย RewriteCond ล่าสุดดังนั้นฉันจึงต้องใส่ทุกอย่างในบรรทัดเดียวและ จากนั้นทำการตรวจสอบแผนที่ แต่ขอบคุณคุณคุณผลักฉันไปในทิศทางที่ดี :)

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