חיפוש ]

על הפניות וביטויים רגולריים (Regex) בוורדפרס

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

לדוגמה, ניתן להשתמש בהם ב-PHP, אך הם מעט שונים ב-JavaScript ואף שונים כשמבצעים הפניות 301.

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

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

בפוסט הבא אני מסביר מהן הפניות 301. אם אינכם יודעים מה אלו, תנו מבט…

תוסף הפניות לוורדפרס (Redirection Plugin)

אתם ודאי יודעים כי הפניית כתובת URL ישנה שאינה בשימוש לעמוד חדש הכרחית לטובת קידום האתר בגוגל ועבור SEO. ביצוע הפניות מאפשר לקחת את כוח הדירוג (Link Equity) הקיים בכתובת הישנה ולהעבירו לכתובת החדשה.

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

ישנן לא מעט דרכים לגשת להפניות, אך הדרך הפשוטה והקלה ביותר לניהול הפניות הינה שימוש בתוסף Redirection של John Godley.

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

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

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

התקנת התוסף Redirection

התקינו והפעילו את התוסף Redirection וגשו לכלים > Redirection בכדי להתחיל.

התקנת התוסף Redirection

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

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

ביטויים רגולריים והפניות – Prefix ו-Suffix

שתי קומפוננטות עיקריות של הפניות עם ביטויים רגולריים הן התו הראשון והאחרון – התחילית (^) והסופית ($).

אלו מאפשרים לכם לקבוע את תחילתו וסופו של הביטוי ומונעים לא מעט טעויות הגורמות ללולאות הפניה (Redirect Loops). הנה דוגמה:

^/old-page/$

והנה כיצד זה נראה בתוסף Redirection:

ביטויים רגולריים והפניות

יש לשים לב כי תיבת הסימון Regular Expressions מסומנת כמובן בכדי שהתוסף יכבד את הביטויים הרגולריים.

ביטוי, או הפניה זו תתממש אך ורק לעמוד http://domain.co.il/old-page/ בדיוק בפורמט הזה. אם לא היינו מוסיפים את התחילית (^) והסופית ($), ההפנייה הייתה מתבצעת גם עבור http://domain.co.il/about/old-page/ למשל.

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

השתמשו תמיד בתווים ^ ו-$ בהפניות regex. ללא אלו, הפניה עבור /product/ עלולה להתאים בטעות גם ל-/new-product/, /product-reviews/, או כל כתובת אחרת המכילה את אותה מחרוזת, ולגרום ללולאות הפניה או עמודים שבורים.

מה לגבי אותו Trailing Slash?

אולי שמתם לב כי הדוגמה שהבאנו רלוונטית עבור /old-page/ עם Trailing Slash בסופו, אך לא תתאים ל-/old-page ללא Trailing Slash.

מכיוון ורבים אלו שבוחרים להשתמש ב-Trailing Slash בסוף כתובת ה-URL ורבים שבוחרים אחרת, זו חייבת להילקח בחשבון ביצירת הפניות באתר.

אתם מוזמנים לתת מבט על חשיבות ה-Trailing Slash בכתובות URL.

הנה דרך לבצע ביטוי רגולרי יחיד התואם לעמוד בשני המצבים, בין עם Trailing Slash ובין אם ללא:

^/old-page[/]?$

הוספנו את ה-[/]?$ על מנת לציין כי התו הזה אופציונלי. בואו נתאר בפרוטרוט ביטוי רגולרי זה:

  • ^ = תחילתה של כתובת ה-URL (כלומר שם הדומיין + הסיומת).
  • /old-page = חייב להופיע בכתובת ה-URL ישר לאחר תחילתה של הכתובת.
  • [/]? = בנקודה זו יכול להיות התו "/" או לא.
  • $ = סוף כתובת ה-URL.

טכניקה זו מאפשרת לכם ליצור הפנייה אחת המכסה שתי אפשרויות בכתובת ה-URL, עם וללא Trailing Slash. אך הטכניקה שנראה בסעיף הבא חזקה אף יותר…

שימוש ב-Wildcards עבור הפניות

הפניית Wildcard מאפשרת לכם ליצור הפנייה המבוססת על כל עמוד התואם את התבנית (pattern) של ביטוי רגולרי כלשהו, ללא הבחנה של כתובת URL ספציפית.

אפשרות זו שימושית במיוחד עבור הפניית תיקיות שלמות או חלקים באתר ישן לאתר חדש. לדוגמה, ניתן להשתמש בהפנייה זו בכדי להפנות את כל כתובות ה-URL המתחילות ב-/products/ (רבים) לכתובת URL התואמת /product/ (יחיד).

הנה ביטוי רגולרי אליו כתובת המקור של ההפנייה צריכה להתאים (Source URL):

^/old/(.*)$
  • ^ = תחילתה של כתובת ה-URL.
  • /old/ = חייב להופיע בכתובת ה-URL ישר לאחר תחילתה של הכתובת.
  • (.*) = Wildcard. יתאים לכל מחרוזת בכתובת לאחר /old/ ושומר זאת לשימוש בכתובת היעד של ההפניה.
  • $ = סוף כתובת ה-URL.

והנה כתובת היעד (Target URL):

/new/$1

החלק $1 מדפיס את המחרוזת אותה ה-Wildcard תופס בכתובת המקור. ניתן להשתמש במספר Wildcards כבדוגמה הבאה:

^/old/(.*)/old-section/(.*)

וזה יבצע הפנייה לכתובת ה-URL הבאה:

/new/$1/new-section/$2

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

בדיקה וביצוע הפניות

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

  • לפני בדיקת ההפנייה ודאו כי זיכרון המטמון (cache) נקי לוקאלית וברמת השרת.
  • השתמשו ב-Incognito/Private Browsing מכיוון ודפדפנים לעיתים שומרים את ההפנייה בזיכרון מאחורי הקלעים. אם אתם משתמשים בתוסף cache כמו WP Rocket, התוסף LiteSpeed Cache, cache ברמת השרת או Cloudflare למשל, ודאו כי אתם מנקים גם את אלו.
  • הימנעו משרשור הפניות ככל הניתן. שרשרת הפניות מאטה את טעינת הדף ומדללת את כוח הדירוג. נסו לשמור על הפניה אחת מקסימום לכל כתובת URL.
  • אם אתם נתקלים בלולאת הפניות (Redirect Loop), בדקו האם אין התנגשות עם הפניות אחרות, כמו אלו המופיעות בקובץ .htaccess. הפניות דרך .htaccess מתבצעות קודם להפניות ברמת התוסף.
  • בדקו את תבניות ה-regex שלכם באמצעות כלי בדיקה מקוון לפני שתפרסו אותן. הדביקו את התבנית ומספר כתובות URL לדוגמה בכדי לוודא שהיא מתאימה רק למה שאתם מצפים.

חלק מספקי אחסון מנוהלים לוורדפרס (כמו WP Engine) ביטלו את התמיכה ב-.htaccess ומשתמשים בכלי ניהול הפניות משלהם במקום. אם הספק שלכם אינו תומך ב-.htaccess, תוסף Redirection הוא חלופה אמינה שעובדת ללא תלות בקונפיגורציית השרת.

שאלות נפוצות

שאלות נפוצות בנושא הפניות וביטויים רגולריים בוורדפרס:

האם התוסף Redirection עדיין מתוחזק?
כן. התוסף Redirection של John Godley מתוחזק באופן פעיל עם עדכונים שוטפים. הוא דורש PHP 7.2 ומעלה ותואם לגרסה העדכנית ביותר של וורדפרס.
האם עדיף להשתמש בתוסף או ב-.htaccess עבור הפניות?
הפניות ברמת השרת דרך .htaccess מעט מהירות יותר מכיוון שהן מעובדות לפני שוורדפרס נטענת. עם זאת, ההבדל בביצועים זניח. התוסף Redirection קל יותר לניהול, מספק ממשק ויזואלי, ועובד גם בשרתים שלא תומכים ב-.htaccess. עבור רוב האתרים, התוסף הוא הבחירה המעשית יותר.
מהי לולאת הפניות (Redirect Loop) וכיצד לתקן אותה?
לולאת הפניות מתרחשת כאשר כתובת A מפנה לכתובת B, שמפנה חזרה לכתובת A (או דרך שרשרת שבסופו של דבר חוזרת ל-A). דפדפנים מזהים זאת ומציגים שגיאה. הסיבה הנפוצה ביותר היא תבנית regex ללא תווי ^ ו-$ שמתאימה באופן רחב מדי. בדקו את כל ההפניות הפעילות הן בתוסף והן ב-.htaccess.
מה המשמעות של (.*) בהפניית regex?
התבנית (.*) היא Wildcard שמתאימה לכל תו (הנקודה) אפס פעמים או יותר (הכוכבית). הסוגריים לוכדים את המחרוזת שהתאימה כך שניתן להשתמש בה בכתובת היעד באמצעות $1. לדוגמה, ^/old/(.*)$ עם יעד /new/$1 ימפה את /old/shoes/ ל-/new/shoes/.
האם ניתן להשתמש בהפניות regex בזמן מיגרציית אתר?
כן. הפניות regex אידיאליות למיגרציות אתר שבהן מבנה הכתובות משתנה. כלל Wildcard יחיד כמו ^/old-blog/(.*)$ ליעד /blog/$1 יכול לטפל במאות הפניות בבת אחת, במקום ליצור הפניה נפרדת לכל כתובת. זהו אחד היתרונות הגדולים ביותר של שימוש ב-regex עבור הפניות.
האם הפניות דרך התוסף Redirection משפיעות על מהירות האתר?
הפניות ברמת תוסף מעובדות לאחר טעינת וורדפרס, מה שמוסיף עומס קל בהשוואה להפניות ברמת השרת. בפרקטיקה, ההבדל זניח עבור רוב האתרים. אם יש לכם אלפי הפניות פעילות ותנועה גבוהה, שקלו להעביר את ההפניות הנפוצות ביותר ל-.htaccess או לקונפיגורציית השרת.

סיכום

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

התבניות העיקריות לזכור: השתמשו ב-^ ו-$ לעגן את הביטויים, [/]? לטיפול ב-Trailing Slash אופציונלי, ו-(.*) עם $1 עבור הפניות Wildcard. בדקו את התבניות לפני פריסה, נקו את ה-cache, ושימו לב ללולאות הפניה.

אם ישנן דרכים חכמות יותר או אולי דרכים חדשות שלא תיארתי בפוסט, אשמח אם תשתפו את כולנו בתגובות. בהצלחה! 🙂

דיון ותגובות
7 תגובות  ]
  • ענת 26 מאי 2019, 14:53

    הי רועי,
    האם אפשרי לבצע הפנייה כאשר האתר עם הדומיין הישן לא נבנה במערכת וורדפרס?
    איך התוסף מזהה את הבעלות שלי על שני הדומיינים כדי לאפשר את ההפנייה הזו? צריך להגדיר משהו בהגדרות של הדומיין?

    • רועי יוסף 26 מאי 2019, 15:30

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

      בהצלחה!

  • שחר 25 אוגוסט 2019, 10:20

    תודה רבה

  • נתן 13 אפריל 2020, 17:07

    איך אני כותב ביטוי רגולרי שמפנה קישורים עם מבנה קישורים תאריך ופוסט למבנה קישורים פוסט וקטגוריה

    • רועי יוסף 13 אפריל 2020, 17:10

      מה בדיוק מבנה הקישורים הנוכחי שלך?

  • נתן 13 אפריל 2020, 18:32

    מבנה הקישורים הנוכחי זה שם אתר, תאריך ושם הפוסט

השאירו תגובה

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

Savvy WordPress Development official logo