لقد انشغلت مؤخرًا ببرنامج مدونتي الخاصة، ومن الطبيعي أن أنتقل إلى مشكلة إعادة كتابة عنوان 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.
لا أحتاج أن أقول المزيد عن هذه النقطة، في الواقع، الأمر كله يتعلق بالبساطة والتطبيق العملي.
ملاحظة: بالحديث عن ذلك، من الضروري قراءة مستند سكوت ميتشل على موقع 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 (بالطبع يمكنك كتابته بنفسك)، وفهم
معلمات التعبير العادي: معرف المقالة // رقم المقالة [النوع: طول السلسلة: 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/(د{4})/(د{2})/(د{2})/Default.aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1&year=$2&month=$3&day=$4</SendTo>
</RewriterRule>
عند حذف القواعد المكتوبة بهذه الطريقة، سيحدث خطأ 404 بالتأكيد لأن الصفحة التي يتم الوصول إليها غير موجودة. نظرًا لأنه سيبحث على طول علامة الدليل الخاصة بك، إذا قمت بإنشاء مشروع دليل آخر، فسيكون كبيرًا جدًا، ألقِ نظرة على الكود التالي:
<RewriterRule>
<LookFor>~/(ث{6,16})/Articles/(د{4})/(د{2})/(د{2})/(د{6})/Default.aspx</LookFor >
<SendTo>~/Default.aspx?Bloger=$1&year=$2&month=$3&day=$4&time=$5</SendTo>
</RewriterRule>
والآن بعد أن أصبح لدي وقت إضافي، لن يختار أحد إنشاء دليل. ثم الاستفادة الكاملة من الملفات الموجودة لإكمال هذه المهمة.
في الواقع، قد يفكر العديد من الأشخاص في استخدام أسماء الملفات بدلاً من هياكل الدليل. تعال للتفكير في الأمر، أليس كذلك؟ بالطبع، هذا يتطلب فهمًا معينًا للتعبيرات العادية.
حسنا، دعونا نرى كيف يعمل.
<قاعدة كتابة>
<LookFor>~/(w{5,16})/Articles/(د{4})/(د{2})/(د{2})/(د{6}).aspx</ ابحث عن>
<SendTo>~/Default.aspx?ArticleID=$2$3$4$5&Bloger=$1</SendTo>
</RewriterRule>
يمكنك أن ترى بسهولة أنني استخدمت "" للهروب من "/" واستخدمته في اسم الملف. البنية الحالية هي
http://blog.tyoo.net/joshualang/2007/01/18.
من الواضح أن معرف المقالة الخاص بي هي سلسلة تعتمد على السنة والشهر واليوم والساعة والدقيقة والثانية، لأنه من المنطقي إدراج البيانات دون النظر في الازدواجية، كما أن استخدام الوقت هنا مناسب أيضًا للاستعلام. المجموعة المكونة من 14 رقمًا التي تم الحصول عليها بـ $2$3$4$5 هي معرف المقالة الخاص بي، ويمكن العثور على السجل بسهولة من خلال تاريخ النشر ورقم المقالة. الفائدة الأخيرة واضحة بشكل خاص عند الحذف.
الآن دعونا نحذف الجزء الزمني:
<RewriterRule>
<LookFor>~/(w{5,16})/Articles/(د{4})/(د{2})/(د{2}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$2$3$4&Bloger=$1</SendTo>
</RewriterRule>
في المقابل، يمكننا حذف عنوان URL في هذا النمط: http://blog.tyoo.net/joshualang/Articles/2007.aspx أو حتى
http://blog.tyoo.net/joshualang/Articles/Default.aspx أليس الأمر بسيطًا جدًا؟ ولكن عليك الانتباه إلى المشكلة: كل شيء غير ممكن ويمكن تحقيقه. هناك العديد من الأشياء التي يجب وضعها في الاعتبار، مثل:
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 غير مقبول أيضًا. يجب تحديد قواعد الاستجابة الأخرى لتحقيق تأثيرات إعادة الكتابة المناسبة.
حسنًا، التأثير موجود تقريبًا، إليك رمز القاعدة الكامل:
<!--المؤلف: جوشوا لي ( [email protected] ) س:245965348-->
<!-- قواعد عرض محتوى المدونة -->
<قاعدة كتابة>
<LookFor>~/([A-Za-z]w{5,16})/Default.aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1</SendTo>
</RewriterRule>
<!-- قواعد قائمة المقالات -->
<قاعدة كتابة>
<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>
</RewriterRule>
<قاعدة كتابة>
<LookFor>~/Articles/(د{4})/(د{2})/(د{2})/(د{1,6})((/)?).aspx</ ابحث عن>
<SendTo>~/Default.aspx?ArticleID=$1$2$3$4</SendTo>
</RewriterRule>
<قاعدة كتابة>
<LookFor>~/Articles/(د{4})/(د{2})/(د{2})/([A-Za-z]w{5,16}).aspx</ ابحث عن>
<SendTo>~/Default.aspx?ArticleID=$1$2$3&Bloger=$4</SendTo>
</RewriterRule>
<قاعدة كتابة>
<LookFor>~/Articles/(د{4})/(د{2})/(د{2})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2$3</SendTo>
</RewriterRule>
<قاعدة كتابة>
<LookFor>~/Articles/(د{4})/(د{2})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2&Bloger=$3</SendTo>
</RewriterRule>
<قاعدة كتابة>
<LookFor>~/Articles/(د{4})/(د{2})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1$2</SendTo>
</RewriterRule>
<قاعدة كتابة>
<LookFor>~/Articles/(د{4})/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1&Bloger=$2</SendTo>
</RewriterRule>
<قاعدة كتابة>
<LookFor>~/Articles/(د{4})((/)?).aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=$1</SendTo>
</RewriterRule>
<قاعدة كتابة>
<LookFor>~/Articles/([A-Za-z]w{5,16}).aspx</LookFor>
<SendTo>~/Default.aspx?Bloger=$1</SendTo>
</RewriterRule>
<قاعدة كتابة>
<LookFor>~/Articles/Default.aspx</LookFor>
<SendTo>~/Default.aspx?ArticleID=-1</SendTo>
</RewriterRule>
ملاحظة: لمنع المستخدمين من حذف ملحق .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