שימוש בקובץ 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 יכול לגלם שינוי משמעותי ברוחב הפס כמו גם בשימוש במעבד – שני פקטורים חשובים במיוחד באיכסון שיתופי.

לדרג את הפוסט
0

Comments

19 תגובות על “שימוש בקובץ htaccess‏”

  1. מעולה!
    תמיד רציתי לדעת על זה….בעיקרון גם ניתן להחביא עם HTACCESS תיקיות שלמות, לא?

    1. לא יודע מה הכוונה שלך בלהחביא, אבל אפשר להגן בעזרת סיסמא או לחסום גישה מדפדפנים מסוגים שונים או מכתובות IP שונות וכ'.

  2. אפשר לוותר על האקספייר של הCSS, לא? מדובר בסה"כ על קובץ טקסט…

    1. גם קבצי ה JS הם בסך הכל קבצי טקסט פשוטים. העמוד הראשי שלי שוקל (אחרי הרבה עבודת אופטימיזציה) 264kb. מתוכו, 8% הם קבצי CSS. נכון שזה בסך הכל כ 24kb אבל זה עוד משהו שאפשר לגלח.
      במקרה שלי, כל השיפוצים הקטנים הללו מתגלמים בעמוד ראשי במשקל של 8kb אחרי שהקאש כבר התמלא – 3% מנפח העמוד המקורי.

      1. איך אפשר לדעת כמה שוקל העומד הראשי?

        1. אם יש לך את התוסף Firebug אתה יכול להלביש עליו את התוסף Yslow ולקבל את המידע הזה

  3. אבל בjs נוגעים לעיתים רחוקות.
    הcss נראה לי כמו דבר שמצד אחד משנים הרבה, מצד שני שוקל מעט – לא שווה לאגור.

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

  4. קודם כל, תודה על המידע, פוסט מעניין
    ועכשיו שאלה לגבי פג תוקף לקבצים –
    כשבודקים את התעבורה ברשת (עם firebug למשל) אז רוב הקבצים מלבד ה html לא יורדים שוב,
    ומקבלים עבורם סטטוס http 304 , כלומר הדפדפן מזהה שהקובץ לא השתנה ולכן לא מוריד אותו שוב.
    לרוב הקבצים שזה קורה להם הם קבצי css, תמונות וכדומה.
    אם זה המצב, למה להסתבך עם הגדרות פג תוקף?

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

  5. האם קיימת דרך להגיד ל-.htaccess להעביר אותנו מעמוד כזה: http://domain.com לעמוד כזה: http://www.domain.com?
    כלומר, אם אין WWW בכתובת השרת יוסיף WWW. שים לב שבגוגל יש את זה וגם בוורדפרס, אם אתה אומר לו בהגדרות שהכתובת של הבלוג היא http://www.domain.co.cc ולא http://domain.com.

    הקיצר, יש לך מושג איך אפשר לעשות את זה? אני מתאר לעצמי שגם בו מדובר בכמה שורות פשוטות בקובץ ה-.htaccess…

    1. לא משנה – מצאתי: http://www.htaccesstools.com/articles/htaccess-redirect/ (הפיסקה האחרונה).

      1. בסוף זה לא עבד…

    2. אפשר לעשות דבר כזה:
      ##RewriteCond %{HTTP_HOST} !^www\.

      ##RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

      1. עובד. תודה.

  6. ראשית תודה מדריך טוב.

    שנית,
    אולי תוכל לעזור לי
    אני משתמש בפונקציה של ErrorDocument 404 לעמודים לא תקינים
    יחד עם זאת אני רוצה גם שאם תמונה לא פעילה הוא יציג תמונה אחרת אבל זה יוצר לי נגישות בניהם
    האם יש איזה קוד שאני יכול להשתמש ב2 הפונקציות?

  7. […] htaccess הדרך הראשונה, משתמשת בכתיבה של מערך חוקי הפניות בקובץ ה htaccess. דרך זו לעיתים תהיה פשוטה יותר ונעדיף להשתמש בה על מנת […]

  8. […] אז למה אני מזכיר אותה פה בכל זאת? כי נתקלתי היום בפוסט מעולה של ניצן שמסביר אך כן עושים את זה נכון, ( מה ז'ותמרת אך? […]

  9. […] אז למה אני מזכיר אותה פה בכל זאת? כי נתקלתי היום בפוסט מעולה של ניצן שמסביר אך כן עושים את זה נכון, ( מה ז'ותמרת אך? […]

כתיבת תגובה

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