שימוש בקובץ htaccess‏

כשהבלוג הזה התחיל את דרכו, הוא רץ על גבי מחשב ביתי שהריץ חלונות ועליו התקנתי בין היתר את כל הדרוש להרצה של בלוג ולאחר זמן מה הוא עבר לאיכסון שיתופי מינימאלי בגו-דאדי. המשותף היה מבנה התיקיות (או למעשה חוסר ההבנה שלי לגבי תיקיות) וכך הייתה תיקיית וורדפרס ואל תוכה השלכתי שלל תיקיות נוספות עם שמות כגון images או files. אל התיקיות הללו ניתן היה להגיע כמובן על ידי הוספת שם התיקיה לאחר כתובת הבלוג. טכנית, זה עבד – לא הייתה שם שום בעיה, אבל בכל פעם שרציתי לשדרג את וורדפרס התחלתי להסתבך עם הקבצים.
שיטת העבודה הזו הייתה כורח בעבודה מול גו דאדי שכן בחשבון המינימלי הם לא אפשרו שיוך של סאבדומיינים לספריות אחרות או משהו בסיגנון. אבל, כשעברתי לדרימהוסט הקונספט השתנה. מהר מאוד העברתי את התיקיות הללו אל מחוץ לתיקייה של וורדרפס ויצרתי להן סאב-דומיינים כגון images.n2b.org. זו הייתה פעולה פשוטה בהתחלה אבל מהר מאוד התחילו להופיע בלוגים שגיאות 404 מרובות, מסתבר שביותר מדי פוסטים ברחבי המערכת שילבתי הפניות אל מבנה התיקיות הישן ולא עידכנתי את הכתובת לצורה החדשה.
טכנית, יכולתי לעבור בין כל הפוסטים ולשנות את כל ההפניות הנדרשות, בפועל זה הצריך יותר מדי עבודה והתיאשתי בערך אחרי 4 פוסטים. הפיתרון הגיע בדמותו של תוסף ה wp-redirect שמאפשר להגדיר הפניה מכתובת במבנה אחד לכתובת במבנה אחר. התוסף היה נוח למדי והיות ובאותה התקופה גם הפכתי חלק מהקטגוריות לתגיות עשיתי בו שימוש נרחב. אחת הבעיות הגדולות ביותר הופיעה במסד הנתונים שלי כשעד מהרה הלוג של התוסף תפח לגודל של כמה עשרות מגה, אבל הבעיה האמיתית היא צורת העבודה של התוסף – בכל פעם שמשתמש מבקש דף מהאתר, התוסף עובר על רשימת כל ההפניות הקיימות ובודק אם יש התאמה. אם כן – הוא מבצע את השינוי הנדרש ואם לא מתקבל הדף המקורי – שיטת עבודה זוללת משאבים.

הפיתרון הגיע בעזרת שימוש בקובץ htaccess שהוא למעשה קובץ קונפיגורציה לשרת אפאצ'י. ברגע שממקמים את הקובץ בתיקיה הרלוונטית ניתן להכתיב לשרת דרכי התנהגות מסוימות. השרת טוען את קובץ ההגדרות ומגיש את הקבצים על פי ההוראות הקיימות בו – פעולה המאפשרת להקל על עבודת ה PHP. למעשה מה שהתוסף עשה קודם, דומה למה שעושים tinyurl ודומיהם – הם מקבלים כתובת ספציפית, בודקים לאן היא צריכה להפנות ומחזירים למשתמש את הקישור החדש ביחד עם הודעת 302. אבל היות והמבנה הוא תמיד זהה, מדוע לא להשתמש בקובץ ה htaccess כדי לעשות את ההפניה הזו?

Redirect /images http://images.n2b.org

השורה הבודדת הזו בקובץ הקונפיגורציה אומרת בעצם לשרת שכל בקשה לקובץ בנתיב מהצורה n2b.org/images יש להפנות אל images.n2b.org – שורה אחת, בלי ניהול מסד נתונים, בלי מאמץ על ה PHP.

הדומיין הקודם שלי היה the-nzb.com ובשלב מסויים העברתי אותו ל n2b.org, אחד הדברים שלא עשיתי (ואולי חבל שלא) היה לטפל בכל הקישורים שעדיין הגיעו אל the-nzb.com. מה שעשיתי בפועל זה הפניה פשוטה דרך פאנל הניהול של דרימהוסט כך שכל מי שינסה להגיע אל הדומיין הישן יועבר אל העמוד הראשי של הדומיין החדש. בפועל, אפשר לדאוג לכך בעזרת htaccess.

RewriteCond %{HTTP_HOST} ^(.*)the-nzb.com [NC]
RewriteRule ^(.*)$ http://n2b.org/$1 [R=301,L]

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

הגדרת פג תוקף לקבצים

מי שמשתמש בתוסף Yslow של יאהו בוודאי מכיר את ציוני הנכשל התמידיים שמקבלים על תוקפם של קבצים (Add Expires headers). ברמת העיקרון כשמשתמש נכנס לאתר בפעם הראשונה הוא מוריד ממנו את כל הקבצים ושומר בזיכרון של הדפדפן. אם לא מוגדר עבור הקבצים פג תוקף ארוך טווח, הקבצים הללו ימחקו במהירות ובכניסה הבאה שוב יהיה צורך להוריד את כל הקבצים מהשרת. הגדרה של פג תוקף ארוך אומרת בעצם לדפדפן לשמור את הקבצים הללו לתקופה ארוכה (חודש ומעלה, אבל אין גבול) בזיכרון שלו ולהשתמש בהם כשהוא קורא את העמוד. ככה למעשה הדפדפן של המשתמש מוריד רק את הקוד עצמו ולא את שלל התמונות, קבצי ה JS וה CSS המצורפים – נפח שיכול להגיע ל 2-3 מגה בקלות ואף יותר. המשתמש מקבל את העמודים הרבה יותר מהר והשרת מקבל פחות בקשות לקבצים – ומכאן הפחתה של העומס על השרת. בעיקרון זה פיתרון אידיאלי, בפועל עלול להיות לו מחיר כבד. אם למשל יצאתם מתוך נקודת הנחה שאתם לא מתכוונים להחליף את ערכת העיצוב שלכם בתקופה הקרובה ושמתם לקובץ ה CSS שלכם פג תוקף של חצי שנה אבל אחרי שבועיים עשיתם בו תיקון (קטן כגדול) אתם עלולים לגלות שעד חצי שנה לאחר מכן המשתמשים שלכם אינם רואים את השינויים הללו. הפיתרון הוא כמובן לרוקן את המטמון של הדפדפן, אבל לך תסביר לכלל הגולשים למה הכוונה ואיך לעשות זאת. יש פיתרונות איגוף, הפשוט מכולם הוא לשנות את שם הקובץ אבל רוב ערכות העיצוב של וורדפרס משתמשים בפונקציה המובנית כדי להגיש קובץ הנקרא style.css מתיקיית העיצוב. לכן, כדאי להשתמש בזהירות.


ExpiresActive On
ExpiresByType text/css "access plus 7 days"
ExpiresByType text/javascript "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType image/gif "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/jpg "access plus 30 days"
ExpiresByType application/x-shockwave-flash "access plus 30 days"

השימוש ב ifmodule נועד למנוע מצב שבו השרת לא תומך בפג תוקף, בדרך כלל אין מה לחשוש, אבל תמיד כדאי להיות בצד הבטוח. התחביר פשוט מאוד – סוג הקובץ ותקופת הפג תוקף, כאשר access plus 30 days אומר בעצם 30 יום מהגישה לקובץ. את ה css כאן בחרתי לקצוב למשך שבוע מיום הגישה, תמונות ואנימציות פלאש למשך חודש.

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


  SetOutputFilter DEFLATE
  AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascript application/x-javascript

לסיכום
נגעתי פה במשמעות של htaccess ברמה של על המזלג על מנת להדגים את החשיבות שלו וישומים רלוונטיים שלו בוורדפרס. הקובץ הזה הוא עולם שלם המספק שלל אפשרויות לניהול השרת. אפשר להשתמש בו כדי לעבור מאתר סטטי (מבוסס Html) לאתר דינמי (מבוסס php) בקלות ומבלי לפגוע בקישורים הקיימים. ניתן להשתמש בו כדי לנהל מערך של כתובות יפות מבלי לעבור דרך קובץ php (פונקציה שוורדפרס לא עושה בה שימוש) ועוד היד נטויה. בפועל שימוש מושכל ב htaccess יכול לגלם שינוי משמעותי ברוחב הפס כמו גם בשימוש במעבד – שני פקטורים חשובים במיוחד באיכסון שיתופי.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *