Score:1

Apache mod_rewrite/mod_redirect: แปลง URL ด้วยพารามิเตอร์การค้นหาเป็น URL ที่เป็นมิตรกับ SEO พารามิเตอร์แบบสอบถามบางตัวจะถูกละเว้น

ธง cl

ดังกล่าวข้างต้น

อาจอธิบายได้ดีที่สุดด้วยตัวอย่าง:

  • URL ดั้งเดิม (ลำดับของพารามิเตอร์ไม่สอดคล้องกัน)

  • หากฉันไปที่ URL ตัวอย่างใดๆ จาก 3 ตัวอย่างด้านบน ฉันต้องการเปลี่ยนเส้นทางไปที่ www.myhost.com/my-page/v1/v2

    • p3 ถูกเพิกเฉยโดยเจตนาเพราะไม่ต้องการอีกต่อไป
    • ใน URL โลกแห่งความจริงของฉัน ฉันมีพารามิเตอร์ p4 ถึง p6 ซึ่งถูกละเว้นเช่นกัน ฉันเขียนถึง p3 เท่านั้นเพื่อความง่าย

ฉันดู/ค้นหาในเน็ตแล้ว แต่ไม่มีอะไรใกล้เคียงกับสิ่งที่ฉันพยายามทำเลย ขอขอบคุณ.

Score:1
ธง kz

คุณสามารถทำได้ดังต่อไปนี้โดยใช้ mod_rewrite:

RewriteEngine เปิดอยู่

RewriteCond %{QUERY_STRING} (?:^|&)p1=([^&]+)
RewriteCond %1@%{QUERY_STRING} ^([^@]+)@(?:|.*&)p2=([^&]*)
RewriteRule ^/?(หน้าของฉัน)$ /$1/%1/%2 [QSD,R=302,L]

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

พารามิเตอร์ URL สามารถเกิดขึ้นได้ในลำดับใดก็ได้

@ (ในเงื่อนไขที่สอง) เป็นเพียงอักขระตามอำเภอใจที่ไม่ได้เกิดขึ้นใน v1 และใช้เป็นตัวคั่นระหว่าง v1 และสตริงข้อความค้นหาเมื่อค้นหา พี 2.

พารามิเตอร์ URL อื่นๆ ทั้งหมด (เช่น หน้า 3..พี.เอ็น) ถูกละเว้น (และละทิ้ง)

ทั้งคู่ หน้า 1 และ พี 2 ต้องมีค่าที่ไม่ว่างสำหรับการเปลี่ยนเส้นทางที่จะเกิดขึ้น

อัปเดต: หน้า 1 ต้องมีค่าที่ไม่ว่างเปล่า (มิฉะนั้น การเปลี่ยนเส้นทางที่ได้จะคลุมเครือ) พี 2 ต้องมีด้วย แต่ค่าที่ได้ ว่างเปล่า. ฉันได้อัปเดต regex ด้วยเพื่อที่จะอนุญาตสตริงข้อความค้นหาที่มีรูปแบบไม่ถูกต้อง (แต่ยังคงใช้ได้) โดยที่ตัวคั่นพารามิเตอร์ URL (&) เกิดขึ้นก่อน พี 2 ที่จุดเริ่มต้นของสตริงข้อความค้นหา เช่น. /หน้าของฉัน?&p2=&p1=v1 จะยังคงถูกเปลี่ยนเส้นทางไปที่ /หน้าของฉัน/v1/.

เดอะ คำพูด ตั้งค่าสถานะละทิ้งสตริงการสืบค้นดั้งเดิมจากคำขอ

ขึ้นอยู่กับตำแหน่งที่ใช้คำสั่งเหล่านี้ (เช่น ไดเรกทอรี หรือ เซิร์ฟเวอร์ บริบท) และวิธีการกำหนดเส้นทาง URL ในท้ายที่สุด คุณอาจต้องเพิ่ม สภาพเริ่มต้น เพื่อให้แน่ใจว่ามีการประมวลผลเฉพาะคำขอโดยตรง (ตรงข้ามกับคำขอที่เขียนใหม่)

ตัวอย่างเช่น เพิ่มสิ่งต่อไปนี้เป็นเงื่อนไขแรก ถ้าจำเป็น:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
:

อัปเดต:

p1 และ p2 เป็นข้อบังคับ p3 เป็นตัวเลือก

คุณสามารถเปลี่ยนด้านบนดังต่อไปนี้:

RewriteCond %{QUERY_STRING} (?:^|&)p1=([^&]+)
RewriteCond %1@%{QUERY_STRING} ^([^@]+)@(?:|.*&)p2=([^&]+)
# p3 เป็นค่าบังคับและต้องมีค่า
RewriteCond %1/%2/@%{QUERY_STRING} ^([^@]+)@(?:|.*&)p3=([^&]+) [OR]
# OR p3 ถูกละไว้หรือไม่มีค่า
การเขียนซ้ำ Cond %1/%2 (.+)
RewriteRule ^/?(my-page)$ /$1/%1%2 [QSD,R,L]

เงื่อนไขที่ 2 ทำให้แน่ใจว่ามีค่าสำหรับ พี 2 พารามิเตอร์ (เช่น v2) - ต้องไม่ว่างเปล่า

จากนั้นเงื่อนไขที่ 3 จะตรวจสอบความไม่ว่างเปล่า หน้า 3 พารามิเตอร์ หรือ เงื่อนไขที่ 4 เพียงแค่จับค่าเมื่อ หน้า 3 พารามิเตอร์ว่างเปล่าหรือข้ามไปเลย

การเปลี่ยนเส้นทางที่เป็นผลลัพธ์จะไม่ใช้เครื่องหมายทับต่อท้ายเมื่อ หน้า 3 ไม่มีอยู่ ตัวอย่างเช่น การเปลี่ยนเส้นทางที่เป็นผลลัพธ์จะเป็นอย่างใดอย่างหนึ่ง /mypage/v1/v2 หรือ /mypage/v1/v2/v3. (เครื่องหมายทับท้ายที่อาจเกิดขึ้นบน /mypage/v1/v2/ หลีกเลี่ยงได้)

ในรอบชิงชนะเลิศ การแทน สตริง ค่าของ %1 และ %2 การอ้างอิงย้อนกลับจะแตกต่างไปจากก่อนหน้านี้เล็กน้อย ค่าเหล่านี้ไม่มีแต่ละค่าอีกต่อไป (เช่น v1 และ v2). แทน %1 ประกอบด้วย v1/v2 และ %2 มีทั้ง /v3 (รวมถึงคำนำหน้าเครื่องหมายทับ) หรือ is ว่างเปล่า (เมื่อไร หน้า 3 ว่างหรือละไว้)

cl flag
ให้ฉันพยายาม. ขอบคุณ
kz flag
@mrjayviper ฉันได้อัปเดตคำตอบเพื่ออนุญาตพารามิเตอร์ _empty_ (แต่ยังคงมีอยู่) `p2` และอนุญาตให้ใช้สตริงข้อความค้นหาที่มีรูปแบบไม่ถูกต้อง (แต่ยังคงใช้ได้) โดยที่ตัวคั่นพารามิเตอร์ URL (`&`) เกิดขึ้นทันทีก่อน `p2` ที่ส่วนเริ่มต้นของสตริงข้อความค้นหา เช่น. `/my-page?&p2=&p1=v1` (ตัวพิมพ์ใหญ่)
cl flag
ฉันเพิ่งรู้ว่าตอนนี้ p3 เป็นทางเลือกแล้ว ฉันต้องเปลี่ยนแปลงอะไรบ้างในการเปลี่ยนแปลงเพิ่มเติม ดังนั้นจำเป็นต้องมี p1 และ p2 p3 เป็นตัวเลือก ขอขอบคุณ.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา