Цей пост буде корисний тим, хто додає/змінює стандартні правила .htaccess, що використовує WordPress .
За замовчуванням, WordPress автоматично може змінювати вміст файлу .htaccess в корені вашого сайту, якщо йому це потрібно. Це може відбуватися, наприклад, якщо ви встановили якийсь плагін, що додає нові види посилань на сайті, чи змінили налаштування “постійних посилань” в адмінці.
Стандартний код в цьому файлі для коректної роботи вордпрес виглядає так:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Code language: HTML, XML (xml)
WordPress, за потреби щось змінити, орієнтується на вказані на початку та наприкінці коментарі “# BEGIN WordPress” та “# END WordPress“, та модифікує лише те, що знаходиться між ними.
Суть запропонованого метода полягає в тому, що ми пропишемо двічі цей “стандартний” код, але в одному випадку із вказаними коментарями та “хаком”, щоб цей код не працював, а другий зі зміненими коментарями. Описано трохи заплутано, тому краще просто погляньте далі, і все стане на свої місця:
# Рішення від https://m0n.co/08
<IfModule mod_ignore_wordpress.c>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
</IfModule>
# CUSTOM WORDPRESS
<IfModule mod_rewrite.c>
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Якесь ваше правило 1
# Якесь ваше правило 2
# ........................
RewriteRule . /index.php [L]
</IfModule>
Code language: PHP (php)
Пояснення до коду досить просте…
Перша половина коду “загорнута” в умову IfModule mod_ignore_wordpress.c , тобто ця половина коду буде працювати лише тоді, коли умова виконується. Суть умови – “якщо на вебсервері увімкнено модуль mod_ignore_wordpress.c“.
Оскільки назва модуля mod_ignore_wordpress.c вигадана, ця умова ніколи не буде виконуватись, і код всередині умови також.
Оскільки цей код містить коментарі “# BEGIN WordPress” та “# END WordPress” – то вордпрес усі зміни буде вносити між цими коментарями, але впливу на роботу сайту це не матиме жодного, оскільки код всередині умови, яка не виконується.
Нижче , у другій половині, наведено той самий код, але з вашими правками. Відповідно цей код вордпрес змінювати не буде, і під час якихось переналаштувань в адмінці чи встановлені нових плагінів, ваші кастомні правила нікуди не зникнуть.
Проте за актуалізацією другої половини необхідно слідкувати вручну, але таке вже життя 🙂 , якщо щось кастомне дописуєш.