apache mod_rewrite: การใช้ฐานข้อมูลเพื่ออัพเดตกฎการเขียนซ้ำ

มือใหม่ทั้งหมดที่ mod_rewrite

สมมติว่าฉันต้องการสร้าง URL ที่ดีสำหรับผู้ผลิตทุกรายบนเว็บไซต์ของฉัน ดังนั้นฉันจึงมี www.mysite.com/samsung www.mysite.com/sony www.mysite.com/acme

ทำงานได้ดีพอ

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

นอกจากนี้ เหตุใดปัญหานี้จึงไม่ครอบคลุมหัวข้อหลักในบทช่วยสอนสำหรับ mod_rewrite mod_rewrite จะมีประโยชน์อย่างไรเมื่อคุณต้องบำรุงรักษาด้วยตนเอง (สมมติว่าคุณมีเนื้อหาใหม่บนไซต์ของคุณเป็นครั้งคราว)

นอกจากนี้ยังมีการกล่าวถึงความจำเป็นในการเข้าถึง httpd.conf ฉันจะเข้าถึง httpd.conf บนเซิร์ฟเวอร์ของผู้ให้บริการโฮสต์ของฉันได้อย่างไร เว็บไซต์อื่น ๆ ทำเช่นนี้ได้อย่างไร?

ขอบคุณ


person A-OK    schedule 28.11.2010    source แหล่งที่มา


คำตอบ (2)


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

RewriteRule ^(.*)$ myroute.php?url=$1 [QSA,L]

จากนั้น ในไฟล์ myroute.php คุณสามารถรวมตรรกะเพื่อดูพารามิเตอร์สตริงการสืบค้น "url" ได้ เนื่องจากไฟล์นั้นจะมี URL ดั้งเดิม ที่เข้ามา บางทีคุณอาจจับคู่มันกับผู้ผลิตได้ ในฐานข้อมูลหรือสิ่งอื่นใดที่จำเป็น

ตัวอย่างนี้เห็นได้ชัดว่าใช้ URL ทั้งหมด และแมปไปยัง myroute.php อีกตัวอย่างหนึ่งอาจเป็นเช่น:

RewriteRule ^/manufacturers/(.*)$ manuf.php?name=$1 [QSA,L]

ในกรณีนี้ มันจะจับคู่ URL ในลักษณะนี้:

/manufacturers/sony => /manuf.php?name=sony
/manufacturers/samsung => /manuf.php?name=samsung
ฯลฯ...

ในกรณีนี้ ไฟล์ manuf.php ของคุณสามารถค้นหาฐานข้อมูลตามพารามิเตอร์สตริงการสืบค้น name

person Dean Harding    schedule 29.11.2010
comment
โอเค นั่นไม่ได้เกิดขึ้นกับฉัน... ขอบคุณ :) แต่แล้วไงล่ะ? ฉันจะกำหนดเส้นทางผ่าน header() ไปยัง URL ที่ถูกต้องหรือไม่ ฉันจะเก็บ URL สวยๆ ไว้ได้อย่างไร? - person A-OK; 29.11.2010
comment
@A-OK หาก mod_rewrite สามารถทำได้ มันจะใช้การเปลี่ยนเส้นทางภายในเพื่อให้ผู้ใช้เห็นเห็น URL ที่สวยงามที่เขียนใหม่ล่วงหน้า ตัวอย่างที่ไม่สามารถเป็นได้เมื่อปลายทางอยู่บนโฮสต์ที่แยกจากกัน หรือเมื่อคุณบอกอย่างชัดเจนให้ใช้การเปลี่ยนเส้นทาง HTTP - person Laurence Gonsalves; 29.11.2010
comment
ฉันถามเกี่ยวกับตัวอย่างข้างต้น หากการเขียนซ้ำเปลี่ยนเส้นทาง URL ทั้งหมดไปยังไฟล์ myroute.php ซึ่งจะเปลี่ยนเส้นทางเพิ่มเติมผ่าน header() (ฉันไม่รู้ว่าต้องทำอย่างไร) URL ใดที่จะมองเห็นได้เมื่อผู้ใช้มาถึงหน้าที่เหมาะสม - person A-OK; 29.11.2010
comment
ไฟล์ myroute.php สามารถ include ไฟล์ที่จำเป็นสำหรับการประมวลผลจริง (จริงๆ แล้วไม่ได้ทำการเปลี่ยนเส้นทาง) เมื่อพิจารณาว่าไฟล์ใดควรจะทำงาน หากคุณใช้ตัวอย่าง manuf.php ที่สอง ก็ไม่มีการเปลี่ยนเส้นทางเพิ่มเติม manuf.php จะทำงานทั้งหมดโดยตรง - person Dean Harding; 29.11.2010
comment
ขอบคุณ นั่นสมเหตุสมผลแล้ว น่าเสียดายที่ฉันไม่สามารถใช้การตั้งค่าแบบนั้นกับสิ่งที่ฉันตั้งใจไว้ได้ แต่ฉันจะใช้มันในอนาคตเมื่อสร้างเว็บไซต์ตั้งแต่เริ่มต้น - person A-OK; 29.11.2010

เพิ่งเจอคำตอบนี้ในขณะที่ค้นหาวิธีแก้ปัญหาที่คล้ายกัน - เมื่อค้นหาเพิ่มเติมอีกเล็กน้อยฉันพบว่าตอนนี้ mod_rewrite มี RewriteMap ซึ่งจะทำตามที่คุณต้องการโดยไม่จำเป็นต้องใช้ PHP หรือภาษาสคริปต์อื่น

ซึ่งช่วยให้คุณกำหนดกฎการแมปด้วยไฟล์ข้อความ ไฟล์ DBM สคริปต์ภายนอก หรือการสืบค้น SQL

ฉันหวังว่ามันจะช่วยได้!

person Jez    schedule 10.12.2012
comment
ว้าว ขอบคุณ นี่คือสิ่งที่ฉันต้องการจริงๆ โดยเฉพาะบรรทัดนี้เกี่ยวกับ plain text map : ดังนั้น เมื่อ < มีการร้องขอ href="http://example.com/product/television" rel="nofollow noreferrer">example.com/product/television RewriteRule ถูกนำมาใช้ และคำขอจะถูกแมปภายในกับ example.com/prods.php?id=993 - person cnlevy; 12.08.2016