דילוג לתוכן
שרת ו-.htaccess

קובץ .htaccess ברירת מחדל בוורדפרס: הקוד ואיך לשחזר אותו

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

פורסם

קובץ .htaccess ברירת המחדל של וורדפרס הוא בלוק RewriteEngine קצר שהתוכנה כותבת בקובץ .htaccess בשורש האתר שלכם, כדי שקישורים קבועים כמו /2026/10/post-name/ יעבדו במקום להחזיר 404. הוא נראה כך:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

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

בהתקנה בתת-תיקייה, וורדפרס מכניסה את נתיב תת-התיקייה גם ל-RewriteBase וגם לכלל האחרון, למשל RewriteBase /blog/ ו-RewriteRule . /blog/index.php [L]. רשתות מולטי-סייט משתמשות בבלוק אחר, ווורדפרס לא כותבת עבורן את הקובץ הזה באופן אוטומטי.

עיקרי הדברים

  • וורדפרס מייצרת את הבלוק הזה ב-Apache וב-LiteSpeed כשיש לה הרשאת כתיבה וקישורים קבועים ידידותיים פעילים. מספיק לפתוח את הגדרות > קישורים קבועים.
  • אם הקובץ חסר או פגום, קישורים קבועים מחזירים 404 בזמן שעמוד הבית עדיין נטען, כי עמוד הבית לא צריך את כללי ה-rewrite.
  • כל מה שאתם או תוסף מוסיפים צריך להיות מעל # BEGIN WordPress, אף פעם לא בתוך הסימונים. וורדפרס מחליפה את כל מה שביניהם כשהיא מעדכנת את הקובץ.
פלט טרמינל מ-Apache: בלי קובץ .htaccess עמוד הבית מחזיר 200 וכתובת של פוסט מחזירה 404; עם בלוק ברירת המחדל שניהם מחזירים 200
תגובות אמיתיות מ-Apache 2.4.58. בלי הקובץ, עמוד הבית נטען וכתובת הפוסט מחזירה 404. עם בלוק ברירת המחדל, שניהם מחזירים 200. קובץ בדיקה index.php בן שורה אחת החליף את WordPress.

מה כל שורה עושה בפועל

RewriteEngine On מפעיל את המודול mod_rewrite של Apache עבור התיקייה הזו; בלעדיו כללי ה-rewrite שמתחתיו לא עושים דבר.

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] משאיר את הכתובת כמו שהיא (זו המשמעות של -) ומעתיק את כותרת Authorization של הבקשה למשתנה שרת. וורדפרס קוראת את המשתנה הזה כדי לקבל שם משתמש וסיסמה שנשלחו בכותרת, כמו סיסמת יישום.

RewriteBase / קובע את קידומת הנתיב ש-Apache משתמש בה עבור כתובות שנכתבו מחדש. וורדפרס מגדירה אותו לפי המיקום של האתר, כך שהתקנה בתת-תיקייה מקבלת RewriteBase /blog/.

RewriteRule ^index\.php$ - [L] הוא שומר: אם הבקשה כבר אל index.php, הכתיבה מחדש נעצרת והבקשה עוברת ללא שינוי.

שתי שורות RewriteCond הן הלוגיקה עצמה. %{REQUEST_FILENAME} !-f ו-!-d שואלים “האם הבקשה הזו לא תואמת קובץ אמיתי, וגם לא תואמת תיקייה אמיתית?” שניהם חייבים להתקיים כדי שהכלל האחרון יפעל, כך שתמונה אמיתית, קובץ CSS או PDF שהועלה מוגשים ישירות ולא נוגעים בניתוב של וורדפרס.

RewriteRule . /index.php [L] הוא מה שגורם לקישורים קבועים לעבוד. כל מה שעבר את שני התנאים נשלח אל index.php, ווורדפרס מחליטה לאיזה פוסט, עמוד או ארכיון הכתובת מתכוונת.

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

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

זה לא פותר את הבעיה במקרים הבאים:

  • הקובץ או התיקייה שלו אינם ניתנים לכתיבה על ידי המשתמש שמריץ את PHP. המסך מציג שגיאה שאומרת שקובץ .htaccess אינו ניתן לכתיבה, יחד עם הכללים להדבקה. אצל חלק מספקי האחסון PHP רץ כמשתמש מערכת אחר מזה שבבעלותו קבצי ה-FTP שהעליתם, כך שהרשאות שנראות תקינות בתוכנת FTP עדיין יכולות לחסום את וורדפרס.
  • אתם על nginx. מדריך ה-nginx של וורדפרס אומר של-nginx אין קובץ הגדרות ברמת תיקייה כמו .htaccess, ושוורדפרס לא יכולה לשנות את הגדרות השרת. הניתוב המקביל הוא הנחיית try_files בהגדרות השרת, ומנהל מערכת צריך לערוך אותה.
  • AllowOverride מוגדר ל-None עבור תיקיית האתר בהגדרות הראשיות של Apache. התיעוד של Apache אומר: “This means .htaccess files are completely ignored unless you explicitly enable them for a directory.” כלומר, המערכת מתעלמת לחלוטין מקובצי .htaccess אלא אם מפעילים אותם במפורש עבור תיקייה. וורדפרס יכולה לכתוב קובץ מושלם והוא עדיין לא ישפיע. כללי rewrite דורשים AllowOverride FileInfo (או All), וייתכן שספק האחסון יצטרך לשנות זאת.
  • הקישורים הקבועים שלכם מוגדרים כפשוטים. כתובות פשוטות לא צריכות כללי rewrite, ולכן וורדפרס לא יוצרת עבורן את הקובץ.

איך משחזרים אותו ידנית

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

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

2. אם זה לא עוזר, צרו את הקובץ ידנית. התחברו דרך FTP/SFTP או מנהל הקבצים של ספק האחסון ועברו לתיקיית השורש של האתר, שהיא בדרך כלל זו שמכילה את wp-admin. בדקו אם .htaccess קיים. זה קובץ שמתחיל בנקודה, ולכן חלק ממנהלי הקבצים מסתירים אותו כברירת מחדל; הפעילו “הצגת קבצים מוסתרים”.

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

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

הכללים שלכם מול הבלוק של וורדפרס

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

# Rules you or a plugin added: ABOVE the WordPress markers
<FilesMatch "\.(jpg|jpeg|png|gif)$">
    # example: hotlink protection, caching rules, etc.
</FilesMatch>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

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

500 Internal Server Error מיד אחרי עריכת הקובץ מצביע על מה ששיניתם זה עתה. התיעוד של Apache אומר שיומן השגיאות כנראה יציין הנחיה שאינה מותרת או שגיאת תחביר. כללים שהועתקו ממדריך ישן יכולים לגרום לזה: Order היא פקודה לא תקפה ב-Apache 2.4 אלא אם mod_access_compat טעון. בטלו את העריכה כדי להחזיר את האתר לפעולה, ואז קראו את יומן השגיאות.

מעבר לבלוק ברירת המחדל

בלוק ברירת המחדל מטפל רק בניתוב קישורים קבועים ובכותרת Authorization. כדי להדק את הגישה לקבצים רגישים, למשל לחסום הרצת PHP ב-/uploads או לדחות בקשות ישירות אל wp-config.php, ראו כללי אבטחה ב-.htaccess של וורדפרס שבאמת עוזרים. אם קישורים קבועים מחזירים 404 מסיבה אחרת, כמו מבנה קישורים שגוי, שכבת מטמון שמגישה כללים ישנים או התנגשות בתת-תיקייה במולטי-סייט, המדריך קישורים קבועים בוורדפרס לא עובדים עובר על שאר הסיבות.

שאלות נפוצות

מה זה קובץ .htaccess ברירת המחדל של וורדפרס? זה בלוק RewriteEngine שוורדפרס כותבת בין # BEGIN WordPress ל-# END WordPress בקובץ .htaccess בשורש האתר. הוא מעביר את כותרת Authorization ל-PHP ושולח ל-index.php כל בקשה שאינה קובץ או תיקייה אמיתיים.

מה הקוד המדויק של .htaccess ברירת המחדל של וורדפרס? RewriteEngine On, כלל שמעביר את כותרת Authorization ל-PHP, RewriteBase /, כלל מעבר עבור index.php, שני תנאים שבודקים שהבקשה אינה קובץ או תיקייה אמיתיים, וכלל אחרון ששולח את כל השאר ל-index.php. הבלוק המלא מופיע בראש המדריך הזה.

למה כל הפוסטים שלי מחזירים 404 חוץ מעמוד הבית? קובץ .htaccess חסר או פגום ב-Apache יוצר את הדפוס הזה. השרת מוצא את עמוד הבית בלי כללי rewrite. כל קישור קבוע אחר צריך את הכללים האלה כדי להגיע ל-index.php, ולכן בלעדיהם Apache מחפש קובץ שלא קיים ומחזיר 404.

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

למה ל-nginx אין קובץ .htaccess של וורדפרס? ל-nginx אין קובץ הגדרות ברמת תיקייה כמו .htaccess של Apache. אותו ניתוב נכתב ככלל try_files בהגדרות השרת של nginx, ומנהל מערכת צריך לערוך אותן כי וורדפרס לא יכולה לשנות אותן.

למה ה-.htaccess שלי התקלקל אחרי שמירת קישורים קבועים? בדקו אם כלל מותאם אישית הוצב בתוך הסימונים # BEGIN WordPress ו-# END WordPress. וורדפרס מחליפה את כל מה שביניהם כשהיא מעדכנת את הקובץ, ולכן הכלל הזה אובד. שמרו כללים מותאמים אישית מעל הסימונים.

מקורות


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

FAQ

שאלות

מה זה קובץ .htaccess ברירת המחדל של וורדפרס?

זה בלוק RewriteEngine שוורדפרס כותבת בין # BEGIN WordPress ל-# END WordPress בקובץ .htaccess בשורש האתר. הוא מעביר את כותרת Authorization ל-PHP ושולח ל-index.php כל בקשה שאינה קובץ או תיקייה אמיתיים.

מה הקוד המדויק של .htaccess ברירת המחדל של וורדפרס?

RewriteEngine On, כלל שמעביר את כותרת Authorization ל-PHP, RewriteBase /, כלל מעבר עבור index.php, שני תנאים שבודקים שהבקשה אינה קובץ או תיקייה אמיתיים, וכלל אחרון ששולח את כל השאר ל-index.php. הבלוק המלא מופיע בראש המדריך הזה.

למה כל הפוסטים שלי מחזירים 404 חוץ מעמוד הבית?

קובץ .htaccess חסר או פגום ב-Apache יוצר את הדפוס הזה. השרת מוצא את עמוד הבית בלי כללי rewrite. כל קישור קבוע אחר צריך את הכללים האלה כדי להגיע ל-index.php, ולכן בלעדיהם Apache מחפש קובץ שלא קיים ומחזיר 404.

האם וורדפרס יוצרת מחדש את .htaccess באופן אוטומטי?

כן, ב-Apache או ב-LiteSpeed עם mod_rewrite, אם קישורים קבועים ידידותיים פעילים ווורדפרס יכולה לכתוב שם. מספיק לפתוח את הגדרות > קישורים קבועים. קובץ חסר דורש תיקייה ניתנת לכתיבה, וקובץ קיים חייב להיות ניתן לכתיבה. אחרת, המסך מציג שגיאה יחד עם הכללים להדבקה ידנית.

למה ל-nginx אין קובץ .htaccess של וורדפרס?

ל-nginx אין קובץ הגדרות ברמת תיקייה כמו .htaccess של Apache. אותו ניתוב נכתב ככלל try_files בהגדרות השרת של nginx, ומנהל מערכת צריך לערוך אותן כי וורדפרס לא יכולה לשנות אותן.

למה ה-.htaccess שלי התקלקל אחרי שמירת קישורים קבועים?

בדקו אם כלל מותאם אישית הוצב בתוך הסימונים # BEGIN WordPress ו-# END WordPress. וורדפרס מחליפה את כל מה שביניהם כשהיא מעדכנת את הקובץ, ולכן הכלל הזה אובד. שמרו כללים מותאמים אישית מעל הסימונים.