הפניית 301 – htaccess vs php

שאלות על איך עושים נכון הפניית 301 עולות הרבה בפורומים שונים. האם באמצעות תוסף כמו יואסט, האם תוסף מיוחד להפניות או האם כדאי בכלל לעשות אותן בקובץ htaccess? חושבים שאתם יודעים את התשובה?
redirection

תוכן עניינים

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

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

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

מה זה htaccess

htaccess הוא קובץ קונפיגורציה לשימוש בשרתי Apache. הקובץ יושב בתיקיות באתר מבוסס Apache וכאשר ניגשים לתיקיה לטעון קובץ מסוים, השרת יקרא קודם כל את ה htaccess ויבצע על פיו מה שהוגדר. ניתן להשתמש בקבצי htaccess כדי לשנות הגדרות בשרת כמו גם כדי לשנות פונקציונאליות. דוגמאות לכמה שימושים נפוצים הן: קאש, דחיסה, פעולות אבטחה למיניהן והפניות.

אם להיות מדויקים, הקובץ הוא "distributed configuration files". השם לא חייב להיות htaccess, אלא ניתן להגדיר לו שם אחר ע"י הוראת AccessFileName בהגדרות השרת.

ישנה נקודה בתחילת המילה אבל בגלל בעיית תצוגה של עברית אנגלית אני מחסיר את הנקודה וכותב רק htaccess בלי הנקודה.

איך htaccess עובד

קובץ htaccess פועל ברמת התיקיה. כלומר כל השינויים שהגדרנו בקובץ יפעלו בתיקיה בה הקובץ יושב ובכל תיקיות הבת שלה.

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

לכן, כשניגשים לתיקיה מסוימת, השרת יקרא את כל קבצי htaccess מהתיקיה הראשית ועד לתיקיית היעד ואז יישם את ההגדרות.

את ההוראות עצמן בתוך הקובץ השרת צריך לקרוא בצורה סדרתית, לקמפל ולהריץ בהתאם.

טוב או רע להשתמש ב htaccess

שאלה מצוינת! והתשובה, טוב יחסית למה?

כמו שראינו בפסקה הקודמת, אופן הפעולה של עבודה עם הקובץ עלול לגרום לבעיות ביצועים מכמה סיבות.

  1. מתבצעת קריאה רקורסיבית של כל קבצי ה htaccess בהיררכיה עד תיקיית היעד.
  2. הניסיון לקריאה יתבצע בכל מקרה, אפילו אם אין בכלל קובץ כזה בתיקיות האב.
  3. הקריאה תתבצע בכל גישה לתיקיה.
  4. הפרסור של הקובץ והקומפילציה יתבצעו בכל פעם מחדש ובצורה סדרתית.

אם כך, נראה שזה ממש גרוע להשתמש ב htaccess כדי לבצע דברים. הבעיות הרשומות כאן הן אמיתיות ויכולות להשפיע על ביצועי שרת הווב. אז התשובה צריכה להיות "אל תשתמשו ב htaccess".

לכן באמת ההמלצה של Apache היא לא להשתמש ב htaccess אם לא חייבים. השימוש בו נפוץ בחברות האחסון המוכרות בגלל הסיבה שהוא פועל פר תיקיה וכך הם יכולים לאפשר למשתמשים להגדיר דברים באתר בלי לתת גישה להגדרות ראשיות של השרת. בהערת אגב, יש חברות אחסון שלא תומכות בהגדרה דרך htaccess בדיוק בגלל הסיבות שרשמתי והן מציעות פתרונות אחרים. WP Engine לדוגמה מפסיקה את התמיכה ב htaccess החל מגרסה 7.4 של php.

אבל להגיד בצורה גורפת ששימוש ב htaccess הוא גרוע, זה לא לגמרי מדויק. כלומר כל החסרונות שרשמתי הם נכונים אבל זה אם מתייחסים להאם כדאי להשתמש ב htaccess או בקובץ ההגדרות הראשי של השרת (Apache HTTPD main config file).

במקרה של השוואה כזאת, התשובה בהחלט ברורה, אסור להשתמש ב htaccess כי את הכל ניתן לעשות בקובץ ההגדרות הראשי ברמת ה httpd ולא לאפשר אוברייד. ואז נרוויח את הדברים הבאים:

  1. מתבצעת קריאה אחת בלבד לקובץ ההגדרות הראשי.
  2. אין ניסיונות נוספים לקריאה בהיררכיה משום מתבצעת קריאה אחת.
  3. הקריאה תתבצע פעם אחת בלבד בעלייה.
  4. הקומפילציה של הקובץ תתבצע פעם אחת ותשמר.

מתי טוב להשתמש ב htaccess

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

אבל רגע לא כל כך מהר, יש עוד אופציה חוץ מ htaccess.

האם htaccess עדיף על קוד php

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

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

איך עובדות הפניות 301

htaccess

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

php

לעומת זאת, אם ההפניה נעשית ברמת ה php התהליך יהיה כך: השרת יבקש old-page, השרת יטען את php, הליבה של וורדפרס תעשה מה שצריך, התוסף של ההפניות יקבל את תורו לבצע מה שצריך, הקוד יצטרך להתפרסר ולהתקמפל ולרוץ, התוסף יצטרך לבדוק ב DB האם יש צורך בהפניה לדף המסוים ואם כן הוא יחזיר תשובה לדפדפן עם תוספת בהדר של 301 (או 302) ואז תתבצע בקשה נוספת אם הכתובת של ההפניה. מדובר בהרבה יותר עבודה.

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

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

איך נכון לבצע הפניה

ברוב המקרים, הפניה באמצעות htaccess תהיה יעילה יותר כמו שכתבתי למעלה. אבל שתי הערות בנידון:

  1. התיאור למעלה לא הכי מדויק. כי גם במקרה של php יש אופטימיזציות שאפשר לעשות כך שהתהליך יהיה יעיל יותר. למשל אם קיים Opcode Cache כמו OPcache הסקריפט של php לא יצטרך להתקמפל מחדש כל פעם. כמו כן, אפשר לבצע את ההפניה לא ברמה של הדר 301 אלא על ידי לוגיקה פנימית של התוסף שתשמור בקאש מיפוי של הפניות. האם יש תוספים שבאמת עובדים כך? אני לא יודע אבל אם כן, זה בהחלט יעיל. האם זה יעיל יותר מ htaccess? לא ניתן לדעת בלי לבדוק ובשביל זה, תקראו גם את הסעיף הבא.
  2. גם במקרה הרגיל שבאמת htaccess מהיר יותר, יש כאן מגבלה מסוימת של כמה הפניות יש. זכרו שקבצי htaccess גם נקראית רקורסיבית מבחינת תיקיות וגם נקראית סדרתית מבחינת סדר הקריאה. עכשיו דמיינו שיש הרבה תיקיות ובכל תיקייה קובץ htaccess ותארו לכם שיש לכם המון הפניות. במקרה זה, אם נשתמש בתוסף php שיבצע בדיקה ב DB (במיוחד אם יש קאש לשאילתות) זה יעבוד מהר יותר.

לכן התשובה היא שכנראה כמעט בכל המקרים הפניה עם htaccess תהיה מהירה יותר אבל תתחשבו בפרטים הקטנים.

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

סיכום

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

איך עושים הפניה על ידי htaccess

הכי פשוט שיש: וזה עובד גם לכתובות url בעברית.

Redirect 301 "old-page" "new-page"

איזה תוספים מומלצים בשביל הפניות

לא בדקתי בעצמי אבל אם להסתמך על כמה מקורות אמינים אז התוספים הבאים מומלצים:

כמו כן אם אתם משתמשים בגרסת הפרימיום של יואסט, תוכלו לעשות זאת משם.

תוכן עניינים

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

הרשמה
Notify of
0 תגובות
Inline Feedbacks
הצג את כל התגובות

גם הפוסטים הבאים יעניינו אותך

0
אשמח לשמוע את דעתכם, מוזמנים להשאיר תגובהx