URL Rewriting
יש פרוייקט קוד פתוח נחמד שמבצע את המשימה של שיכתוב נתיבים. נניח שיש לי בלוג, או רשימת מוצרים,
כל קישור מן הסתם מכיל את שם הדף ועוד איזה 20 פרמטרים כמו מספר קטגוריה, מספר פריט וכו,.
אני לא רוצה להראות כזה נתיב מעצבן עם כל הפרמטרים ששמתי לעצמי בתור מתכנת, אני רוצה שהנתיב יראה כמו שם רגיל
של דף במערכת. למה? קודם כל מנועי חיפוש, מה לעשות שרוב החברות מנסות לטפס ברנקינג של גוגל...?
אז מנועי חיפוש נותנים יותר ניקוד לדפים עם שם "רגיל"
דבר שני זה לא אסטטי לפעמים (נחמד אה...) , לא באמת, לפעמים אני מעביר 7 פרמטרים לדף הבא, אני לא רוצה
שהמשתמש יראה אותם.
אז מה עושים? שיכתוב URL... אני לוקח את הפרמטרים שלי, בונה נתיב שנראה טוב עם סלשים בין הפרמטרים למשל, מגדיר חוקים איך לנתב
את הפניות האלה ואז כל פניה כזאת מגיעה לדף המקורי שרציתי עם הפרמטרים שרציתי בצורה הרגילה (Request.Params)
בואו נראה. קודם כל נוריד את
UrlRewriter.NET
ושם נבחר כמובן בגירסה 2 לדוט נט ( אלא אם כן יש חדשה יותר כבר)
נפתח את הזיפ ונלך לתיקיית bin/release, ושם ניקח את הקובץ Intelligencia.UrlRewriter.dll ונשים אותו בתיקית bin של האתר שלנו (או Add Reference אם בא לכם)
כעת בזהירות ממש נלך ל Web.config ונוסיף כמה שורות
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>
ועוד חלק:
<system.web>
<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>
ואחרון חביב והכי מעניין בשבילנו:
<rewriter>
<rewrite url="~/products/(\d+)/(\d+)/.+" to="~/products/Details.aspx?categoryid=$1&productid=$2"/>
</rewriter>
</configuration>
שימו לב... נחמד? כאן אנו בעצם מגדירים בעזרת Regex את הכתובת שאותה הכניס הלקוח ומה המיפוי האמיתי שלה
ומה הגדרתי פה? כל פניה שבהתחלה שלה כתוב products, אחר כך /, אחר כך יופיע מספר, אחר כך / אחר כך שוב מספר ו /, ואז איזשהו שם, להעביר
לדף Details.aspx עם המספר הראשון בתור פרמטר בשם categoryid והמספר השני בשם productid.
יותר מזה, אפילו אם הדף פיזית לא קיים במערכת, למיפוי שלנו זה לא משנה, הוא מתעלם
מכל מה שכתוב אחרי ה / האחרון
נניח שהלקוח הקיש על לינק : http://www.myhost.com/products/2008/02/ProductDetails.aspx
השיכתוב שהכנסתי יעביר אותו לדף http://www.myhost.com/products/ProductDetails.aspx?categoryid=2008&productid=02
זה יכול לעזור לפעמים...
דרך אגב, יש אתר שנקרא http://tinyurl.com שמספק שירות דומה, אתם מכניסים איזה נתיב באורך כמה מאות תווים והוא מוציא לכם נתיב קצר שמפנה אליו בעצם, כשמישהו לוחץ על הלינק הם מפענחים אותו ומעבירים אותו ללינק המקורי,
הנה לדוגמה לינק לדף שאתם צופים בו עכשיו:
http://tinyurl.com/2a7ghj
להורדת פרוייקט דוגמה