xhtml ssi מפת האתר דף ראשי

«
«
«
«
«
«
ראשי  » אפאצ'י  » הגשת עמודים שונים

מאמר 3: הגשת עמודים שונים בעזרת APACHE/XSSI / לוק נולנד

3.1 הגשת עמודים שונים בעזרת XSSI

שאלה: אני מחפש עבודה ושלחתי ב - e-mail מכתב למספר בתי-עסק, ארגונים ללא רווח ומוסדות להשכלה. במכתב צרפתי URL לקורות החיים שלי - אך אני רוצה לסדר את קורות החיים שלי כך שאם מישהו נכנס לעמוד זה מתוך com., הוא יקבל קודם את הפרטים העסקיים שלי; ואם מוסד עם סיומת org. נכנס לעמוד - הוא יקבל קודם את פרטי העבודה ההתנדבותית שלי; ואם מוסד עם סיומת edu. יכנס לעמוד, הם יקבלו את פרטי ההשכלה שלי.
כיצד אוכל לעשות זאת?

תשובה: נראה שהיום כולם משתמשים ב"עמודים דינמיים" כדי להגיש גרסאות תוכן מרובות למשתמשים שונים באמצעות אותו URL. אפשר לעשות זאת באמצעות המודול של XSSI באפאצ'י 1.2 והתוספות הוירטואליות.

XSSI מאפשר לך להגיש עמודים עפ"י משתני סביבה (למשל - איזה דפדפן יש למשתמש או מאיזה domain המשתמש נכנס לאתרך).
זוהי בעצם הרחבה של NCSA Server Side Includes .

מודול זה כלול ב- mod_include.c והוא עובר קומפילציה, וכך ניתן להשתמש באלמנטים שולטי-הזרימה ב- XSSI ע"מ להגדיר פקודות המבוססות על משתני הסביבה של המשתמש.

אפאצ'י 1.2 כוללת כמה הנחיות נוספות שמרחיבות את הגדרות NCSA המקוריות, ומאפשרות לך לכלול מודולים של מידע בשרת, המצמצמים את מספר החיבורים הדרושים ליצור עמוד. פירוש הדבר הוא שאם אתה מבצע אלמנטים בעמוד שלך באמצעות SSI, הלקוח מקבל את המידע בבקשה אחת ולא במספר בקשות, כפי שקורה אם אתה משתמש בקריאת CGI.

כעת נטפל בקורות החיים שלך. אתה חייב לחלק אותם לשלושה חלקים - volunteer.htmlf, professional.htmlf, education.htmlf .את חלקים אלה תכניס לאותה ספריה בה נמצא עמוד ה- index.html שלך, אשר יכיל את ה- XSSI.
בעמוד index.html שלך, תגדיר את ה- title וה- bgcolog וכל פרט אחר שמתייחס לעמוד כולו, כך שכשמישהו יבקש עמוד זה, יתבצע ניתוח בצד של השרת, ועמוד מותאם אישית יוגש למעביד החדש שלך, מבלי שהוא יודע שזה מתרחש.

ועתה, החלק של ה- XSSI. לא כ"כ קשה להתאים את קורות החיים לפי שם ה-domain של המעביד העתידי - רוב האתרים המסחריים מסתיימים ב- com., רוב האוניברסיטאות מסתיימות ב- edu. ורוב המוסדות ללא כוונת רווח מסתיימים ב- org.
על כן אתה יכול לבסס את ה- XSSI שלך על המשתנה REMOTE_HOST.
זה מה שאתה זקוק לו הוא:
<!--#if expr="\"$REMOTE_HOST\" = /.*com/" -->
<p><!--#include virtual="professional.htmlf" -->
<p><!--#include virtual="volunteer.htmlf" -->
<p><!--#include virtual="education.htmlf" -->

<!--#elif expr="\"$REMOTE_HOST\" = /.*org/" -->
<p><!--#include virtual="volunteer.htmlf" -->
<p><!--#include virtual="professional.htmlf" -->
<p><!--#include virtual="education.htmlf" -->

<!--#elif expr="\"$REMOTE_HOST\" = /.*edu/" -->
<p><!--#include virtual="education.htmlf" -->
<p><!--#include virtual="professional.htmlf" -->
<p><!--#include virtual="volunteer.htmlf" -->

<!--#else -->

<p><!--#include virtual="professional.htmlf" -->
<p><!--#include virtual="volunteer.htmlf" -->
<p><!--#include virtual="education.htmlf" -->

<!--#endif -->

השורה הראשונה היא משפט ה- if שלך ופירושה: "אם ה- host שנכנס לעמוד זה הוא com. כלשהו, בצע את הפעולה הבאה". הסימן *. המופיע לפני com הוא תו wildcard - ז"א כל משתמש שהוא בעל סיומת com.
אם אתה רוצה ניתן גם להחזיר אותו לשם האתר באמצעות /mattmarg.com.*/ , שפירושו "כל מכונה על mattmarg.com שנכנסת לעמוד זה".

שלושת השורות הבאות הן סדרה של תוספות וירטואליות, המקפיצות כל גוש בקורות החיים שלך לפי הסדר הנכון. במקרה הזה, המידע המקצועי יוצג קודם, כיוון שהאתר המבקש הוא com. .

כיון שאתה רוצה גם ליצור שתי גרסאות אחרות של קורות החיים שלך, אתה זקוק לכמה ביטויי else. ב- XSSI, אלה מבוטאים כ- elif, אך אם אתה חייב, אתה יכול להשתמש ב- else. עשיתי זאת בארגומנט האחרון לצורך הבהרת אפשרות זו. ארגומנט זה קורא לשלושת התוספות הוירטואליות להגדרת קורות חיים, כששלושת הארגומנטים הקודמים אינם נפגשים. בתיאוריה, יפנו לעמוד שלך רק ארגונים בעלי 3 הסיומות הללו (כי רק להם שלחת e-mail), אבל חשוב להכיר בכך שקיימים סיומות domain אחרות ועדיף שתכסה את כל האפשרויות, כדי שאף אחד לא יפגוש עמוד ריק.

הדבר הנחמד ביותר בכל זה הוא עניין השקיפות. למשתמש אין מושג מכל מה שקרה כי זה מבוצע בצד השרת. העמוד אינו חושף את מה שבוצע.

 

3.2 ניפוי שגיאות (Debugging )

יש כמה דרכים לגלות ולתקן באגים ב- XSSI שלך. מלבד הדרך הברורה (לוודא שקבצי המקטע שלך קיימים), תוכל להוסיף את הקטע הבא בסוף עמוד ה- index.html שלך:
<pre>
<!--#printenv -->
</pre>

קטע זה ידפיס את משתני הסביבה והערכים של מי שפותח את העמוד (תג <pre> מפרמט זאת). מצד אחד, זה חסר משמעות (כי ברור שלא אתה תפתח את העמוד), אך זה נותן לך את כל המשתנים שהעמוד מקבל. בצורה כזו תוכל לבדוק אם אתה מנסה להגדיר את ה- XSSI שלך לפי משתנה שאינו ניתן להחלה (כגון referer עם תגי <meta> ב- refresh).
בנוסף, זה מאפשר לראות רשימה מלאה של המשתנים.
לא יזיק לך להדפיס עותק של עמוד ה- XSSI מאפאצ'י - כי זה התנ"ך שלך.

בהצלחה.