Search & Replace ב-htaccess

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

הרבה פעמים אנו נעזרים ב-htaccess כדי לסייע לעבודת ה-SEO – שמירה על מבנה עקבי של URL והפניות מסוגים שונים. לא מזמן יצא לי לעבוד על פרויקט מורכב שעבר המרה ממערכת למערכת. אחד הדברים המוזרים במערכת הישנה הוא שהיא תקעה "index.php" מוזר בכל מני מקומות – לפעמים בסוף הכתובת כמו למשל mysite.com/directory/index.php או mysite.com/directory/index.php/1. לפיכך היינו צריכים לייצר htaccess rule על מנת להעלים את ה-string המוזר מה-URL שלנו ולהפנות את המשתמש אל ה-URL ללא הסטרינג.

את זה עשינו באמצעות ה-rule הבא:


   # Removing index.php from anywhere in the URL.

   RewriteCond %{THE_REQUEST} \/index.php/?.*\ HTTP [NC]
   RewriteRule (.*)index\.php\/?(.*) /$1$2 [NC,R=301,L]

מה יש פה בעצם? יש כאן משפט תנאי ומשפט פעולה, בואו וננתח את משפט התנאי:

ראשית הוא מתחיל ב-RewriteCond ובמשתנה %{THE_REQUEST} המשתנה הזה מציג את הבקשה שמגיעה מהמשתמש כפי שהיא נכתבת בלוג שלו. אחרי כן אני מפרט את ה-string, במקרה שלנו index.php. כל הסלאשים אלו נועדו לבצע escaping וה ?/ נועד לכלול את שני המקרים index.php בלי סלאש בסוף ו-/index.php עם סלאש בסוף. ה-HTTP חייב לבוא עם THE_REQUEST והוא מציין שמדובר בפרוטוקול HTTP. ה-NC הוא חשוב מאד והוא מראה לנו שבעצם אין חשיבות להאם מדובר באותיות ראשיות או לא, התנאי יעבוד גם עם index.php וגם עם INDEX.PHP.

אחרי שסיימנו אם התנאי, אנו צריכים להכנס לשכתוב עצמו, RewriteRule. סימנתי את index.php עם הביטוי הבא: ?/\index\.php . כאשר סימן השאלה בא לציין trailing slash (סימן שאלה זה אחד או אפס ב-Regex). ה-(*.) לפני ואחרי מסמן לי את החלקים שבהם אשתמש בשכתוב $1 עבור החלק שלפני הביטוי ו-$2 עבור החלק שלאחריו, וזה בדיוק מה שאני עושה, אחרי שחתכתי את הביטוי אני כותב $1$2 כד לעשות שיכתוב של החלק לפני + החלק אחרי (החלק באמצע נשמט כמובן).
לסיכום, אני כותב L למנוע עיבוד של כללים נוספים, R=301 כדי להחזיר 301 moved permanently וכמובן NC על מנת שזה יעבוד בלי שום קשר אם הכנסתי Index.php או index.php.

זה הכל, פשוט, לא? 🙂

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

אהבתם? לא אהבתם? דרגו!

לא אהבתי בכלללא אהבתיבסדראהבתיאהבתי מאוד (אין הצבעות)


אל תשארו מאחור! יש עוד מה ללמוד!

הצטרפו לעדכונים!

העדכונים נשלחים אך ורק כאשר האתר מתעדכן.

רן בר-זיק

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

מאמרים אחרונים