איך ליצור הפניות זמניות וקבועות עם Nginx

הקדמה

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

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

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

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

דרישות מוקדמות

כדי לעקוב אחרי המדריך הזה, תצטרך:

  • A server with Nginx installed and set up to serve your website(s). You can find some examples and instructions on the tutorials for Ubuntu 22.04, Debian, or CentOS.

פתרון בסיכום

ב-Nginx, אתה יכול לבצע את רוב ההפניות בעזרת ההכוונה המובנית rewrite. ההכוונה הזו זמינה כברירת מחדל בהתקנת Nginx חדשה וניתן להשתמש בה כדי ליצור הפניות זמניות ותמידיות כאחד. בצורתה הפשוטה ביותר, היא מקבלת לפחות שני ארגומנטים: ה-URL הישן וה-URL החדש.

אפשר ליישם הפנייה זמנית עם השורות הבאות בתצורת השרת שלך:

Temporary redirect with rewrite
server {
    . . .
    server_name www.domain1.com;
    rewrite ^/$ http://www.domain2.com redirect;
    . . .
}

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

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

לדוגמה, אם ברצונך להפנות באופן זמני כל דף בתוך www.domain1.com ל- www.domain2.com, תוכל להשתמש בתוכן הבא:

Temporary redirect with rewrite
server {
    . . .
    server_name www.domain1.com;
    rewrite ^/(.*)$ http://www.domain2.com/$1 redirect;
    . . .
}

server {
    . . .
    server_name www.domain2.com;
    . . .
}

כברירת מחדל, ההנחיה של rewrite מקבעת הפניה זמנית. אם ברצונך ליצור הפניה קבועה, תוכל לעשות זאת על ידי החלפת redirect ב־permanent בסופו של ההנחיה, כמו כן:

Permanent redirects
rewrite ^/$ http://www.domain2.com permanent;
rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;

בואו נמשיך אל דוגמאות ספציפיות.

דוגמה 1 — העברה לדומיין שונה

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

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

נניח שכבר הגדרת אתר האינטרנט שלך להיות משורת עם דומיין אחד בשם domain1.com המוגדר כבר ב־Nginx כך:

/etc/nginx/sites-available/domain1.com
server {
    . . .
    server_name domain1.com;
    . . .
}

נניח גם שכבר אתה משיק את הגרסה העתידית של האתר שלך ב־domain2.com:

/etc/nginx/sites-available/domain2.com
server {
    . . .
    server_name domain2.com;
    . . .
}

בואו נשנה את קובץ התצורה של בלוק השרת של domain1.com כדי להוסיף הפניה קבועה אל domain2.com:

/etc/nginx/sites-available/domain1.com
server {
    . . .
    server_name domain1.com;
    rewrite ^/(.*)$ http://domain2.com/$1 permanent;
    . . .
}

הוספנו את ההפניה האמורה באמצעות הוראת rewrite. ביטוי הרגולרי ^/(.*)$ מתאים לכל מה שאחרי ה-/ ב-URL. לדוגמה, http://domain1.com/index.html יופנה מחדש ל-http://domain2.com/index.html. כדי להשיג את ההפניה הקבועה אנו פשוט מוסיפים permanent אחרי הוראת ה-rewrite.

הערה: זכור לבדוק את התצורה שלך באמצעות nginx -t ולאחר מכן לאתחל את Nginx לאחר שתבצע את השינויים שלך.

דוגמה 2 — יצירת חוויית קיימות בלתי פוספת על אף שינויים בשמות של דפים יחידים

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

נניח שבאתר שלך היו שתי עמודים נפרדים עבור מוצרים ושירותים בשם products.html ו-services.html בהתאמה. עכשיו, החלטת להחליף את שני העמודים הללו עם עמוד מציע יחיד בשם offers.html. נקבע הפנייה פשוטה עבור products.html ו-services.html ל-offers.html.

אנו מניחים שהאתר שלך מוגדר כך:

Original server block configuration
server {
    . . .
    server_name example.com www.example.com;
    . . .
}

הגדרת ההפניות היא כל כך פשוטה כמו שימוש בשני פקודות הפניה.

Redirects added to the original configuration
server {
    . . .
    server_name example.com www.example.com;
    
    rewrite ^/products.html$ /offer.html permanent;
    rewrite ^/services.html$ /offer.html permanent;
    . . .
}

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

מסקנה

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

יש שימושים רבים נוספים של הפניות HTTP, כולל כך לאלץ חיבורים מאובטחים ב-SSL (כלומר שימוש ב-https במקום http) ולוודא שכל המבקרים יגיעו רק לכתובת המוקדמת של האתר ב-www..

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-temporary-and-permanent-redirects-with-nginx