Search & Replace ב-htaccess

כך משמיטים מחרוזת טקסט מ-URLים באופן גורף עם htaccess בשרתי Apache

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\/?(.*) /\$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.

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

פוסטים נוספים שכדאי לקרוא

פתרונות ומאמרים על פיתוח אינטרנט

נגישות טכנית – פודקאסט ומבוא

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

רספברי פיי

מה זה AIoT? ואיך אפשר להתחיל?

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

DALL·E 2023-10-21 22.28.58 - Photo of a computer server room with red warning lights flashing, indicating a potential cyber threat. Multiple screens display graphs showing a sudde
יסודות בתכנות

מבוא לאבטחת מידע: IDOR

הסבר על התקפה אהובה ומוצלחת שבאמצעותה שואבים מידע מאתרים

ספריות ומודולים

מציאת PII באמצעות למידת מכונה

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

גלילה לראש העמוד