ช่วงนี้ฉันยุ่งกับโปรแกรมบล็อกของตัวเอง และโดยธรรมชาติแล้วฉันจะหันไปหาปัญหาการเขียน URL ใหม่ซึ่งมักพูดถึงในบล็อก เหตุผลหนึ่งคือปัญหาใบหน้าในระบบบล็อกที่มีผู้ใช้หลายคน เดิมทีฉันต้องการใช้บล็อก CSDN ของฉัน http://blog.csdn.net/joshualang เป็นตัวอย่าง แต่ฉันคิดเกี่ยวกับมันและใช้พื้นที่ของฉัน ( http:/ /www.tyoo.net ) เพราะนี่คือที่ที่ฉันจะไปหลังจากเขียนบล็อกเสร็จ
หากไม่ได้เขียน URL ใหม่ที่จำเป็น เช่น http://www.tyoo.net/blog/joshualang ที่อยู่บล็อก เช่น http://www.tyoo.net/blog/default.aspx?Bloger=joshualang จะปรากฏขึ้น ควรรู้ว่าบล็อกถือเป็นอีกบ้านหนึ่งที่สร้างบนอินเทอร์เน็ตโดยชาวเน็ตส่วนใหญ่ก็จะคำนึงถึงระยะทางของที่อยู่บ้านและคุณภาพการเดินทางเช่นเดียวกันบ้านบนอินเทอร์เน็ตก็ต้องมีเลขที่บ้านด้วย นั่นง่ายต่อการจดจำ เลขที่บ้านนี้ไม่ยาวเกินไป (ไม่ค่อยดีนัก) และใส่พารามิเตอร์เพิ่มตามมาอาจทำให้คนกลัวได้ ถ้าจะอ่านบทความ ก็ต้องเจอกับhttp:// blog.tyoo.net เยอะขนาดนี้/Articles/Default.aspx?Bloger=joshualang&ArticleID=20070118234530 คุณรู้สึกบ้างไหม? มาดูเอฟเฟกต์ที่โปรแกรมบล็อกหลายๆ ตัวมีกันตอนนี้: http://blog.tyoo.net/joshua/Articles/2007/01/18/ ทุกคนจะทราบถึงประโยชน์ของเอฟเฟกต์นี้ได้อย่างรวดเร็ว และนี่คือสิ่งนี้ นำเราไปสู่ประเด็นสำคัญของบทความนี้!
ใช่ เราต้องบรรลุเป้าหมายอย่างใดอย่างหนึ่งผ่านการดำเนินการที่สม่ำเสมอเช่นนี้
ควรเลือก URL ที่ใช้งานได้ตามเกณฑ์ต่อไปนี้:
• สั้น
• พิมพ์ง่าย
• สามารถมองเห็นโครงสร้างของไซต์ได้
• "Truncatable" ซึ่งอนุญาตให้ผู้ใช้เรียกดูไซต์โดยลบส่วนประกอบของ URL
ฉันไม่จำเป็นต้องพูดเพิ่มเติมเกี่ยวกับประเด็นนี้ จริงๆ แล้วมันคือทั้งหมดที่เกี่ยวกับความเรียบง่ายและการปฏิบัติจริง
หมายเหตุ: จำเป็นต้องอ่านเอกสารของ Scott Mitchell บนเว็บไซต์ MSDN http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?pf=true#top
แล้ว ผู้เชี่ยวชาญบางคนได้ชี้แจงหลักการเขียน URL ใหม่ให้ชัดเจนเพียงพอแล้ว หากคุณไม่เข้าใจ คุณสามารถดาวน์โหลดซอร์สโค้ดของเอกสารด้านบนเพื่อศึกษาได้
เพื่อประสิทธิภาพ (เวลาของผู้คนมีค่า และเวลาของโปรแกรมเมอร์ก็มากกว่านั้น) ฉันใช้ส่วนประกอบของ URLRewriter.net โดยตรง จริงๆ แล้ว ฉันไม่เคยมีประสบการณ์ในการเขียน URL ใหม่มาก่อน ดังนั้นฉันจึงอ่านแหล่งที่มาคร่าวๆ โปรแกรมไม่กี่ครั้งและเริ่มที่จะเริ่มต้น แน่นอนว่าไม่จำเป็นต้องมีเนื้อหาทางเทคนิคใดๆ ในช่วงเริ่มต้น ตราบใดที่การเขียนซ้ำสำเร็จก็จะรู้สึกดี จากนั้นในกระบวนการเขียนใหม่อย่างต่อเนื่อง เราจะค้นพบปัญหาและค้นหาแนวคิดใหม่ๆ และการค้นพบใหม่ๆ - - ดังนั้นบทความนี้
มาเริ่มกันเลย คราวนี้ โฟกัสอยู่ที่การเขียน URL ใหม่ของรูปแบบวันที่ที่เพิ่งกล่าวถึง
http://blog.tyoo.net/Articles/2007/01/18/233030/joshualang.aspx นี่คือเอฟเฟกต์สุดท้ายที่จะเกิดขึ้นที่นี่ .
พื้นฐาน: องค์ประกอบ UrlRewriter.net (แน่นอนคุณสามารถเขียนได้ด้วยตัวเอง) เข้าใจ
พารามิเตอร์นิพจน์ทั่วไป: ArticleID // หมายเลขบทความ [ประเภท: สตริงความยาว: 14 (เช่น: yyyymmddhhmmss) // มีความหมายและไม่ซ้ำ]
Bloger //Blog ชื่อผู้ใช้หลัก [ประเภท: สตริงที่ขึ้นต้นด้วยตัวอักษร]
ปัญหาหนึ่งที่พบในระหว่างกระบวนการเขียน URL ใหม่คือข้อผิดพลาด 404 เมื่อเข้าถึงไดเร็กทอรีหรือไฟล์ที่ไม่มีอยู่จริง คำแนะนำที่ให้ไว้ในเอกสารนี้ใน MSDN คือการสร้างโฟลเดอร์ที่จำเป็นและหน้าว่างในไดเร็กทอรีโปรแกรม เป็นเรื่องที่ยุ่งยากจริงๆ จำเป็นต้องสร้างไดเร็กทอรีนับพันรายการ
เนื่องจากเราไม่สามารถเข้าถึงเฉพาะไฟล์ไดเร็กทอรีที่ไม่มีอยู่ เราจึงไม่จำเป็นต้องเข้าถึงไดเร็กทอรีดังกล่าว เราจำเป็นต้องเข้าถึงไฟล์ที่มีอยู่ของเรา (URL ทั้งหมดของฉันชี้ไปที่หน้า Default.aspx ใต้ไดเร็กทอรีรากของบล็อก จากนั้นโหลดกลุ่มควบคุมแบบไดนามิกเพื่อสร้างหน้าฟังก์ชันมุมมองที่แตกต่างกัน แน่นอนว่าคราวนี้เราต้องการชี้ไป หน้านี้ ~/Default .aspx;
งานต่อไปนี้คือการส่งพารามิเตอร์ แน่นอนว่า URL จะถูกส่งผ่านตามค่า นั่นเป็นเหตุผลที่ถึงเวลาที่จะต้องเขียนใหม่
พระเอกกำลังจะปรากฏตัวอีกครั้ง สำนวนปกติ
การใช้นิพจน์ทั่วไปที่นี่เจ๋งจริงๆ~ http://blog.tyoo.net/joshualang/Articles/2007/01/18/Default.aspx ไดเร็กทอรี คุณอาจสร้างกฎการเขียน URL ใหม่ได้ดังต่อไปนี้:
< RewriterRule>
<LookFor>~/(w{6,16})/Articles/(d{4})/(d{2})/(d{2})/Default.aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1&year=$2&month=$3&day=$4</SendTo>
</กฎนักเขียนใหม่>
เมื่อลบกฎที่เขียนในลักษณะนี้ จะเกิดข้อผิดพลาด 404 ขึ้นอย่างแน่นอนเนื่องจากไม่มีหน้าที่เข้าถึงอยู่ เนื่องจากมันจะค้นหาไปจนสุดตามเครื่องหมายไดเร็กทอรีของคุณ หากคุณสร้างโปรเจ็กต์ไดเร็กทอรีอื่น มันจะใหญ่เกินไป ลองดูโค้ดต่อไปนี้:
<RewriterRule>
<LookFor>~/(w{6,16})/Articles/(d{4})/(d{2})/(d{2})/(d{6})/Default.aspx</LookFor >
<SendTo>~/Default.aspx?Bloger=$1&year=$2&month=$3&day=$4&time=$5</SendTo>
</กฎนักเขียนใหม่>
ตอนนี้ฉันมีเวลาเหลือแล้ว จะไม่มีใครเลือกสร้างไดเร็กทอรี จากนั้นใช้ประโยชน์จากไฟล์ที่มีอยู่อย่างเต็มที่เพื่อทำงานนี้ให้เสร็จสิ้น
ที่จริงแล้ว หลายๆ คนอาจนึกถึงการใช้ชื่อไฟล์แทนโครงสร้างไดเร็กทอรี ลองคิดดูสิว่าใช่หรือไม่? แน่นอนว่าสิ่งนี้จำเป็นต้องมีความเข้าใจเกี่ยวกับนิพจน์ทั่วไป
เอาล่ะ เรามาดูกันว่ามันทำงานอย่างไร
<กฎนักเขียนใหม่>
<LookFor>~/(w{5,16})/Articles/(d{4})/(d{2})/(d{2})/(d{6}).aspx</ มองหา>
<SendTo>~/Default.aspx?ArticleID=$2$3$4$5&Bloger=$1</SendTo>
</กฎนักเขียนใหม่>
คุณจะเห็นได้ง่ายๆ ว่าฉันใช้ "" เพื่อหนี "/" และใช้ในชื่อไฟล์ โครงสร้างปัจจุบันคือ
http://blog.tyoo.net/joshualang/2007/01/18
แน่นอนว่า ArticleID ของฉัน เป็นสตริงที่อิงตามปี เดือน วัน ชั่วโมง นาที และวินาที เนื่องจากการแทรกข้อมูลโดยไม่ต้องคำนึงถึงความซ้ำซ้อนและการใช้เวลาที่นี่ก็สะดวกสำหรับการสืบค้นเช่นกัน ชุดค่าผสม 14 หลักที่ได้รับจาก $2$3$4$5 คือ ArticleID ของฉัน สามารถพบได้ง่ายจากวันที่ตีพิมพ์และหมายเลขบทความ ประโยชน์สุดท้ายจะชัดเจนเป็นพิเศษเมื่อทำการลบ
ตอนนี้เรามาลบส่วนเวลา:
<RewriterRule>
<LookFor>~/(w{5,16})/Articles/(d{4})/(d{2})/(d{2}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$2$3$4&Bloger=$1</SendTo>
</กฎนักเขียนใหม่>
ในทางกลับกัน เราสามารถลบ URL เป็นรูปแบบนี้ได้: http://blog.tyoo.net/joshualang/Articles/2007.aspx หรือแม้แต่ http://blog.tyoo.net/joshualang/Articles/Default.aspx
Isn มันไม่ง่ายเลยเหรอ? แต่คุณต้องใส่ใจกับปัญหา: อะไรก็ตามที่เป็นไปไม่ได้และสามารถทำได้ มีหลายสิ่งที่ต้องพิจารณา เช่น:
http://blog.tyoo.net/joshualang/Articles/2007.aspx และ http: //blog อะไรคือความแตกต่างระหว่าง tyoo.net/joshualang/Articles/2007/.aspx อันหลังสามารถทำงานได้ตามปกติหลังจากปฏิบัติตามกฎข้างต้น? ไม่สามารถ
พูดสิ่งเดียวกันได้: http://blog.tyoo.net/joshualang/Articles/2007/01/08/.aspx ก็ไม่เป็นที่ยอมรับเช่นกัน จำเป็นต้องกำหนดกฎการตอบสนองอื่น ๆ เพื่อให้บรรลุผลการเขียนใหม่ที่เหมาะสม
เอาล่ะ ผลกระทบก็ประมาณนี้ นี่คือโค้ดกฎที่สมบูรณ์:
<!--ผู้เขียน: Joshua Li ( [email protected] ) QQ:245965348-->
<!-- กฎสำหรับการแสดงเนื้อหาบล็อก -->
<กฎนักเขียนใหม่>
<LookFor>~/([A-Za-z]w{5,16})/Default.aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1</SendTo>
</กฎนักเขียนใหม่>
<!-- กฎเกณฑ์สำหรับรายการบทความ -->
<กฎนักเขียนใหม่>
<LookFor>~/Articles/(ง{4})/(ง{2})/(ง{2})/(ง{1,6})/([A-Za-z]w {5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2$3$4&Bloger=$5</SendTo>
</กฎนักเขียนใหม่>
<กฎนักเขียนใหม่>
<LookFor>~/Articles/(ง{4})/(ง{2})/(ง{2})/(ง{1,6})((/)?).aspx</ มองหา>
<SendTo>~/Default.aspx?ArticleID=$1$2$3$4</SendTo>
</กฎนักเขียนใหม่>
<กฎนักเขียนใหม่>
<LookFor>~/Articles/(ง{4})/(ง{2})/(ง{2})/([A-Za-z]w{5,16}).aspx</ มองหา>
<SendTo>~/Default.aspx?ArticleID=$1$2$3&Bloger=$4</SendTo>
</กฎนักเขียนใหม่>
<กฎนักเขียนใหม่>
<LookFor>~/Articles/(d{4})/(d{2})/(d{2})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2$3</SendTo>
</กฎนักเขียนใหม่>
<กฎนักเขียนใหม่>
<LookFor>~/Articles/(ง{4})/(ง{2})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2&Bloger=$3</SendTo>
</กฎนักเขียนใหม่>
<กฎนักเขียนใหม่>
<LookFor>~/Articles/(ง{4})/(ง{2})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2</SendTo>
</กฎนักเขียนใหม่>
<กฎนักเขียนใหม่>
<LookFor>~/Articles/(d{4})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1&Bloger=$2</SendTo>
</กฎนักเขียนใหม่>
<กฎนักเขียนใหม่>
<LookFor>~/Articles/(ง{4})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1</SendTo>
</กฎนักเขียนใหม่>
<กฎนักเขียนใหม่>
<LookFor>~/Articles/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1</SendTo>
</กฎนักเขียนใหม่>
<กฎนักเขียนใหม่>
<LookFor>~/Articles/Default.aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=-1</SendTo>
</กฎนักเขียนใหม่>
หมายเหตุ: เพื่อป้องกันไม่ให้ผู้ใช้ลบนามสกุล .aspx ที่สำคัญที่นี่โดยไม่ตั้งใจ ฉันจึงใช้ชื่อผู้ใช้เป็นชื่อระบุตัวตนเสมือนของไฟล์
URL สุดท้ายที่ได้รับ: http://blog.tyoo.net/Articles/2007/01/18/015000/joshualang.aspx
ในเวลาเดียวกัน เวลาสูงสุด 6 หลักในตอนท้ายถูกตั้งค่าให้ลบได้และยาวขึ้น แม้จะสูญหายก็ยังสะดวกที่สุดในการค้นหารายการที่ใกล้เคียงกับเวลาที่ตีพิมพ์โดยใช้ตัวเลขที่แน่นอน
การลบชื่อผู้ใช้จะไม่ส่งผลกระทบต่อการใช้งาน คุณยังสามารถรับรายการบทความที่เหมาะสมที่สุดที่คุณต้องการได้อย่างรวดเร็วผ่านรูปแบบเวลาโดยละเอียด หากชื่อผู้ใช้ไม่บุบสลาย รายชื่อบทความที่เกี่ยวข้องกับผู้เขียนในช่วงเวลาที่กำหนดสามารถพบได้โดยการลบ
โปรดทราบ: รูปแบบของชื่อผู้ใช้ ([A-Za-z]{6-16}) และลำดับการตรวจสอบกฎ
สรุป:
หลังจากผ่านกระบวนการเขียน URL ใหม่แล้ว จะมีรูปแบบที่เข้มงวดเหมือนกับว่าไดเร็กทอรีนี้มีอยู่จริง แต่โครงสร้างเฟรมเวิร์กจะดูสะดวกและยืดหยุ่นมากขึ้น ดังนั้นจึงได้รับการปรับปรุงที่สำคัญในด้านฟังก์ชันการทำงานและประสบการณ์ผู้ใช้ เรามาหยุดที่นี่ก่อน หากคุณมีคำถามใด ๆ โปรดตอบกลับและเข้าร่วมการสนทนา หากมีวิธีที่ดีกว่าในการเขียนใหม่ ฉันยินดีที่จะแจ้งให้เราทราบ
http://www.cnblogs.com/Joshualang/archive/2007/01/19/624302.html