שורת המפתח היא: AddHandler server-parsed shtml.
shtml היא המצאה של אפאצ'י והיא מהווה הרחבה לקבצים הרלוונטיים במסמכי htdocs. יש לחפש ב- error log אם הדברים אינם מתבצעים כהלכה. הודעות השגיאה המועברות ללקוח הן בהכרח בעלות מידע מצומצם כי סביר שמי שקורא אותם נמצא במרחק שלוש יבשות וממילא אינו יכול לעשות דבר.
הטריק הוא להכניס מחרוזות מיוחדות לתוך המסמכים שאפאצ'י יאתר, יזהה ויחליף בהודעות דינמיות. למחרוזות אלה יש צורה ייחודית ומכוונת כדי שלא יתבלבלו בינם לבין המחרוזות הרגילות.
תחביר של פקודה הוא: <-- ...element attribute=value attribute=value #--!>.
פקודה זו קובעת היבטים שונים של החלוקה והניתוח - המאפיינים התקפים של פקודה זו הם:
1. errmsg - הערך הוא הודעה שנשלחת חזרה ללקוח אם מתרחשת שגיאה בעת
החלוקה וניתוח.
2. sizefmt - הערך קובע באיזה פורמט יוצג גודל של קובץ (bytes - תצוגה בבתים;
abbrev תצוגה בקילובית או מגהבית ).
3. timefmt - הערך הוא מחרוזת אשר תופעל ע"י רוטינת ספריית Strftime בהדפסת תאריכים.
פקודה זו מדפיסה את אחד ממשתני ה- include. אם המשתנה אינו מוגדר, הוא מודפס כ- (none). כל תאריך שמודפס כפוף לקונפיגורציה הקיימת של timefmt.
המשתנה היחיד של פקודה זו הוא var וערכו הוא שם המשתנה להדפסה.
פקודה זו מריצה פקודת shell או CGI script. ביטול פקודה זו מתבצע ע"י אופציית IncludeNOEXEC. המאפין בר תוקף הוא cgi.
cgi - הערך הוא נתיב יחסי ל- CGI script של URL. אם הנתיב אינו מתחיל ב - "/", מתייחסים אליו כאל נתיב יחסי למסמך הנוכחי. המסמך אליו מתייחס הנתיב נתפס ע"י השרת כ- CGI script, אפילו אם השרת לא היה מזהה אותו ככזה. אך, הספריה המכילה את ה- script חייבת לאפשר CGI scripts (בעזרת האופציה Script Alias או ExecCGI).
ה- CGI script מקבל את ה- PATH_INFO ומחרוזת השאילתה (QUERY_STRING) של הבקשה המקורית מהלקוח - אי אפשר לפרט אותם בנתיב ה- URL. ה- script יוכל להשתמש גם במשתני include וגם בסביבת CGI הסטנדרטית. אם ה- script מחזיר כותרת עליונה במקום פלט, זה מתורגם לעוגן HTML. אם האופציה NoExec Options מוגדרת בקובץ Config, לא ניתן להשתמש באופציה זו.
יש עדיפות לאלמנט virtual include על פני exec cgi.
השרת מריץ את המחרוזת הנתונה בעזרת bin/sh/ . הפקודה יכולה להכיל משתני include. אם NoExec Options מוגדרת בקובץ הקונפיגורציה, פקודה זו אינה פועלת.
פקודה זו מדפיסה את גודלו של קובץ מסוים, בכפוף למפרט הפורמט של . Sizefmt מאפייניו הם:
1. file - ערכו הוא נתיב, יחסית לספריה הכוללת את המסמך המחולק והמנותח.
2. virtual - ערכו הוא נתיב יחסי של URL למסמך המחולק והמנותח. אם אינו מתחיל ב - "/", הוא מפורש כנתיב יחסית למסמך הנוכחי.
פקודה זו מדפיסה את תאריך העדכון האחרון של הקובץ, בכפוף להגדרת timefmt. מאפייניו זהים לפקודת fsize.
פקודה זו מכניסה את הטקסט של קובץ או מסמך נוסף לתוך הקובץ המנותח. כל קובץ אשר מתווסף באופן זה, כפוף לבקרת גישה רגילה. אם לספריה המכילה קובץ זה מוגדר IncludesNOEXEC, ואם הוספת המסמך גורמת להרצת תוכנית, הקובץ אינו מתווסף. כך מונעים הרצה של CGI scripts.
מאפיין מגדיר את מיקומו של המסמך. ההוספה מתבצעת עבור כל מאפיין של פקודת include.
המאפיינים התקפים הם:
1. file - ערכו של מאפיין זה הוא נתיב יחסי לספריה המכילה את המסמך המנותח.
אסור שיכלול /.. או נתיבים אבסולוטיים (מוחלטים). תמיד יש להעדיף את המאפיין
virtual על פני מאפיין זה.
2. virtual - כתובת URL יחסית למסמך המנותח. אסור שה- URL יכלול
hostname; רק נתיב ומחרוזת שאילתא אופציונלית. אם הכתובת אינה מתחילה ב -
"/", היא מובנת כנתיב יחסי למסמך הנוכחי. כתובת URL בנויה מערכו של המאפיין,
והשרת מחזיר את אותו פלט שהיה מתקבל אם הלקוח היה מבקש את ה- URL. כך
ניתן לקונן קבצים שמוסיפים באמצעות include.
בשיטה זו עדיין ניתן להפעיל CGI scriptאפילו אם האופציה Options NoExec
מוגדרת בקובץ הקונפיגורציה. ההגיון הוא שהלקוחות ממילא יכולים להפעיל את ה- CGI
באמצעות שימוש ב- URL שלו כ- hot link, או הקלדתו בדפדפן ולכן לא נגרם
נזק בשימוש בשיטה זו (להבדיל מ- cmd או exec).
פקודה ה - fsize מאפשרת לדווח על גודל הקובץ בתוך מסמך. הקובץ size.shtml הוא:
<!--#config errmsg="Bungled again!"-->
<!--#config sizefmt="bytes"-->
The size of this file is <!--#fsize file="size.shtml"--> bytes.
The size of another_file is <!--#fsize file="another_file"--> bytes.
|
|
השורה הראשונה נותנת הודעת שגיאה.
השורה השניה מגדירה שגודל הקובץ מוצג בבתים (abbrev במקום bytes יביא להצגה בקילובתים).
השורה השלישית מדפיסה את גודל size.shtml.
השורה הרביעית מדפיסה את גודלו של another_file.
פקודות config חייבות לבוא מעל פקודות אשר עשויות להשתמש בהן.
אפשר לכתוב =virtual במקום = file . virtual נותן את נתיב ה- URL יחסית למסמך המנותח. אם אינו מתחיל ב - "/", הוא מובן ככתובת יחסית למסמך הנוכחי.
יש להקפיד בתחביר - למשל רווחים בסוף מחרוזת גורמים לשגיאה. למשל:
The size of this file is <!--#fsize file="size.shtml "--> bytes.
The size of this file is Bungled again! bytes
|
|
ללא שימוש בפקודת errmsg, היינו רואים:
...[an error occurred while processing this directive].... .
ניתן לדווח על תאריך עדכון אחרון של קובץ בעזרת flastmod. אפשרות זו נותנת ללקוח התרשמות על מידת העדכון של הנתונים המוצגים בפניו. מאפיין timefmt קובע את פורמט הפלט (באלמנט config). הכללים למאפיין timefmt זהים לאלה שלפונקציית Strftime בשפת C של UNIX.
הקובץ time.shtml נותן את הדוגמא הבאה:
<!--#config errmsg="Bungled again!"-->
<!--#config timefmt="%A %B %C, the %jth day of the year, %S seconds since the Epoch"-->
The mod time of this file is <!--#flastmod virtual="size.shtml"-->
The mod time of another_file is <!--#flastmod virtual="another_file"-->
|
|
והפלט הוא:
The mod time of this file is Tuesday August 19, the 240th day of the year,
841162166 seconds since the Epoch The mod time of another_file is Friday August 19,
the 229th day of the year, 840194838 seconds since the Epoch
|
|
נוכל להכניס קובץ אחד בתוך אחר באמצעות פקודת include בצורה הבאה:
<!--#config errmsg="Bungled again!"-->
This is some text in which we want to include text from another file:
<< <!--#include virtual="another_file"--> >>
That was it.
|
|
והפלט הוא:
This is some text in which we want to include text from another file:
<< This the stuff in 'another_file'. >>
That was it.
|
|
אנו יכולים להריץ CGI script מבלי להשתמש ב - SetHandler, AddHandler או ExecCGI.
הפקודה היא {exec{ cmd cgi:
<!--#config errmsg="Bungled again!"-->
We're now going to execute the file 'do_this'.
<< <!--#exec cmd="rubbish/do_this"--> >>
and now /usr/www/cgi-bin/mycgi.ok:
<< <!--#exec cmd="/usr/www/cgi-bin/mycgi.ok"--> >>
That was it.
|
|
ה- script do-this הוא: ls- l.
יש שני מאפיינים ל- exec: האחד הוא cgi והשני הוא cgi .cmd מריץ CGI script ואילו cmd משתמש ב- bin/sh :shell/.
הפלט הוא:
We're now going to execute the file 'do_this'. << >> and
now /usr/www/cgi-bin/mycgi.ok: <<
Content-type: text/html GATEWAY_INTERFACE=CGI/1.1 REMOTE_HOST=192.168.123.1
DOCUMENT_URI=/exec.shtml REMOTE_ADDR=192.168.123.1 QUERY_STRING=
HTTP_USER_AGENT=Mozilla/3.0Gold (Win95; I)
DOCUMENT_ROOT=/usr/www/site.ssi/htdocs HTTP_ACCEPT=image/gif,
image/x-xbitmap,
image/jpeg, image/pjpeg, */* SCRIPT_FILENAME=/usr/www/site.ssi/htdocs/
exec.shtml
LAST_MODIFIED=Thursday, 12-Sep-96 16:34:49 DOCUMENT_NAME=exec.shtml
HTTP_HOST=192.168.123.2 SERVER_SOFTWARE=Apache/1.2-dev
HTTP_CONNECTION=Keep-Alive HTTP_COOKIE=Apache=192380845288358461
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin HTTP_REFERER=
http://192.168.123.2/
SERVER_PROTOCOL=HTTP/1.0 DATE_GMT=Monday, 14-Oct-96 10:21:00
DOCUMENT_PATH_INFO= REQUEST_METHOD=GET SERVER_ADMIN=[no address
given] SERVER_PORT=80 USER_NAME=root SCRIPT_NAME=/exec.shtml
SERVER_NAME=www.butterthlies.com DATE_LOCAL=Monday, 14-Oct-96 10:21:00 >>
That was it.
|
|
ניתן להדפיס מספר משתני סביבה - DATE_GMT, DATE_LOCAL, DOCUMENT_NAME, DOCUMENT_URI LAST_MODIFIED.
הקובץ echo.shtml הוא:
Echoing the Document_URI <!--#echo var="DOCUMENT_URI"-->
Echoing the DATE_GMT <!--#echo var="DATE_GMT"-->
|
|
הפלט הוא:
Echoing the Document_URI /echo.shtml
Echoing the DATE_GMT Saturday, 17-Aug-96 07:50:31
|
|
זוהי אפשרות מיושנת לבצע תוספות שרת באופן אוטומטי אם הרשאת הביצוע מוגדרת בקובץ מסוים. הוא נועד להבטיח תאימות אחורנית. אם מוגדר ה- group execute bit, מוגדר לדפדפן זמן פקיעה ממושך.
זוהי הרחבה לפקודות SSI הסטנדרטיות הזמינות במודול XSSI, אשר הפכה להיות חלק מתקן האפאצ'י החל מגרסה 1.2.
XSSI מוסיף ביחס ל- SSI את היכולות הבאות:
1. XSSI מאפשר משתנים בכל פקודות ה- SSI. למשל אפשר לקבל את תאריך עדכון
האחרון של המסמך הנוכחי בעזרת:
<--"tt><!--#flastmod file="$DOCUMENT_NAME>.
2. פקודת set מגדירה את המשתנים בתוך ה- SSI.
3. אפשר להשתמש בפקודות SSI if, else, elif, endif כדי להוסיף חלקי קובץ על פי
תנאים. למשל, ניתן לבדוק את המשתנה HTTP_USER_AGENT$ כדי לבדוק את סוג
הדפדפן, ופלטים שונים של HTML על פי יכולות הדפדפן.
|
|
| | | | | | | | |