RewriteRule ^/customer/index.php /knowledgebase/ [R=301,L]
ใน .htaccess
, เส้นทาง URL ที่ตรงกับ เขียนกฎใหม่
ลวดลาย (เช่น. ^\/customer\/index.php
) ไม่ขึ้นต้นด้วยเครื่องหมายทับ ดังนั้นสิ่งนี้จะไม่ตรงกันเส้นทาง URL ที่ตรงกันสัมพันธ์กับ ไดเรกทอรี ที่ประกอบด้วย .htaccess
ไฟล์ (น้อยกว่าคำนำหน้าเครื่องหมายทับ) (ไม่เหมือนกับที่ใช้ในก เซิร์ฟเวอร์ บริบท เมื่อเส้นทาง URL ที่ตรงกันคือเส้นทาง URL ญาติรากเอกสาร โดยขึ้นต้นด้วยเครื่องหมายทับ)
คุณยังจะต้อง คำพูด
ตั้งค่าสถานะในกฎข้อแรกเพื่อ ทิ้ง สตริงข้อความค้นหาในคำขอดั้งเดิม มิฉะนั้นจะถูกส่งผ่านตามที่เป็นอยู่
จุดเล็กน้อย... ไม่จำเป็นต้องมีแบ็กสแลช-เอสเคปสแลชใน Apache regex ตั้งแต่นั้นมา ช่องว่าง เป็นตัวคั่นอาร์กิวเมนต์และเครื่องหมายทับไม่มีความหมายพิเศษอย่างอื่นใน regex
ลองทำสิ่งต่อไปนี้แทน:
RewriteEngine เปิดอยู่
RewriteCond %{QUERY_STRING} ^rp=/knowledgebase/
RewriteRule ^customer/index\.php$ /knowledgebase/ [QSD,R=301,L]
RewriteRule ^customer/knowledgebase\.php$ /knowledgebase/ [R=301,L]
ฉันยึดสตริงข้อความค้นหาในไฟล์ เงื่อนไข ก็เลยเข้ากัน rp=...
ที่จุดเริ่มต้นของสตริงข้อความค้นหา ดังตัวอย่างของคุณ เดอะ .*
ในตอนท้ายของ regex ไม่จำเป็น
เดอะ คำพูดคำจา
ไม่จำเป็นต้องตั้งค่าสถานะในกฎข้อที่ 2 เนื่องจากสตริงการสืบค้นจะถูกส่งผ่านตามค่าเริ่มต้น เดอะ คำพูดคำจา
แฟล็กจะต้องใช้ในกรณีที่จำเป็นเท่านั้น ผสาน สตริงข้อความค้นหาเดิมในคำขอด้วยสตริงข้อความค้นหาใหม่ที่คุณต่อท้ายใน การแทน.
เดอะ <IfModule>
ไม่จำเป็นต้องใช้ wrapper เว้นแต่จะมีคำสั่งเหล่านี้ ไม่จำเป็น และตั้งใจให้ใช้กับหลายเซิร์ฟเวอร์ซึ่ง mod_rewrite อาจไม่สามารถใช้ได้ ดูคำถามนี้ในกลุ่มผู้ดูแลเว็บ: https://webmasters.stackexchange.com/questions/112600/is-checking-for-mod-write-really-necessary
คุณควรทดสอบก่อนด้วยการเปลี่ยนเส้นทาง 302 (ชั่วคราว) เพื่อหลีกเลี่ยงปัญหาการแคชที่อาจเกิดขึ้น
อัปเดต: เพื่อทำให้ทุกอย่างง่ายขึ้น ฉันใส่กฎการเขียนซ้ำให้กับ .htaccess
ไฟล์ภายใต้ /ลูกค้า
แทน /
. ฉันได้อัปเดตโพสต์ของฉันตามนั้น
ในกรณีนั้น คุณจะต้องลบไฟล์ ลูกค้า/
คำนำหน้าในแต่ละ เขียนกฎใหม่
รูปแบบตามที่คุณได้ทำไปแล้วในคำถามที่อัปเดตแล้ว
ถ้า รอบ
พารามิเตอร์ URL มีวัตถุประสงค์เพื่อให้ตรงกับที่ใดก็ได้ในสตริงการสืบค้น ดังนั้นคุณควรเปลี่ยน CondPattern อ่าน (^|&)rp=/ฐานความรู้/
แทนที่จะเพียงแค่ลบ ^
คำนำหน้า โดยเอา ^
คำนำหน้าคุณอาจตรงกันมากเกินไป เช่น abcrp=/ฐานความรู้/...
ก็จะตรงกันแม้ว่าในความเป็นจริงแล้วมันอาจจะใช่หรือไม่ใช่ประเด็นก็ตาม
มิฉะนั้น คำสั่งที่อัปเดตเหล่านั้นจะดูใช้ได้ ขึ้นอยู่กับข้อขัดแย้งอื่นๆ ที่อาจมีอยู่ในคำสั่งอื่นๆ การแคชอาจเป็นปัญหาเช่นกัน โดยเฉพาะอย่างยิ่งหากคุณใช้ CDN