.htaccess url เขียนซ้ำลบ 2 id

Nov 02 2020

เป็นไปได้ไหมที่จะลบ ID พารามิเตอร์ 2 ตัวของ url & เพียงแค่แสดงตัวเลข ขณะนี้ฉันมี url ดังนี้:

http://localhost/photo_gallery/public/product_configurator.html?prometheus_id=10082&id=73

URL ที่ต้องการ:

http://localhost/photo_gallery/public/product_configurator.html/10082&73

.htaccess

RewriteEngine on
RewriteRule ^(.*).html $1.php RewriteRule ^product_configurator.php/(\d+)$ product_configurator.php?prometheus_id=$1&id=$2 [NC,L]

เป็นไปได้หรือไม่?

คำตอบ

MrWhite Nov 02 2020 at 20:03

ฉันสมมติ (มองไปที่คำสั่งของคุณ) ที่คุณแฟ้มตั้งอยู่ที่.htaccess/photo_gallery/public/.htaccess

RewriteRule ^product_configurator.php/(\d+)$ product_configurator.php?prometheus_id=$1&id=$2 [NC,L]

สิ่งนี้ใกล้เคียงแม้ว่าคุณจะมีเพียงรูปแบบย่อยการจับเดียว (เช่น(\d+)) แต่คุณมีการอ้างอิงสองรายการ (เช่น. $1และ$2) ในสตริงการแทนที่ นอกจากนี้คุณยังจับคู่เฉพาะตัวเลข ( \d) ในขณะที่รูปแบบที่คุณต้องการจับคู่มี&- ไม่ใช่ตัวเลข ดังนั้นข้างต้นจะไม่สามารถจับคู่ได้

นอกจากนี้คุณยังได้นำ.phpส่วนขยายในขณะที่ตัวอย่าง URL .htmlที่คุณโพสต์ประกอบด้วย ฉันสมมติว่าคุณมีอยู่แล้วเขียนใหม่.htmlเพื่อ.php(แนะนำโดยคำสั่งของคุณ) อย่างไรก็ตามคุณควรทำสิ่งนี้โดยตรงด้วยคำสั่งเดียว

การเขียนซ้ำของคุณเพื่อเปลี่ยนส่วนขยายจาก.htmlเป็น.php(เช่นRewriteRule ^(.*).html $1.php) จะเขียนทับข้อมูลที่คุณพยายามจับคู่เนื่องจากข้อมูลนี้รวมอยู่ในเส้นทาง URL

ลองทำสิ่งต่อไปนี้แทน:

RewriteEngine On

# Rewrite "product_configurator.html/10082&73"
RewriteRule ^(product_configurator)\.html/(\d+)&(\d+)$ $1.php?prometheus_id=$2&id=$3 [L]

เราจับproduct_configuratorสตริงจากคำร้องขอ (เป็น$1backreference) เพื่อบันทึกการทำซ้ำในสตริงการแทนที่ $2และ$3แล้วแทนค่าก่อนและหลัง&ใน URL เส้นทาง

ฉันได้ลบการNCตั้งค่าสถานะเพื่อป้องกันปัญหา "เนื้อหาซ้ำ" ที่อาจเกิดขึ้น หากคุณไม่ต้องการการจับคู่แบบไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่โดยเฉพาะNCควรหลีกเลี่ยงการตั้งค่าสถานะ

แล้ว ...

# Rewrite other ".html" requests to ".php"
RewriteRule (.+)\.html$ $1.php [L]