Цей пост буде корисний тим, хто додає/змінює стандартні правила .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 WordPressCode 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” – то вордпрес усі зміни буде вносити між цими коментарями, але впливу на роботу сайту це не матиме жодного, оскільки код всередині умови, яка не виконується.

Нижче , у другій половині, наведено той самий код, але з вашими правками. Відповідно цей код вордпрес змінювати не буде, і під час якихось переналаштувань в адмінці чи встановлені нових плагінів, ваші кастомні правила нікуди не зникнуть.

Проте за актуалізацією другої половини необхідно слідкувати вручну, але таке вже життя 🙂 , якщо щось кастомне дописуєш.

Author

Дмитро Кондрюк в веб-індустрії з 2003 року. В 2009р. заснував проект Український WordPress (що у подальшому став офіційним сайтом команди локалізації WordPress в Україні). З 2010 року засновник і технічний директор проекту Український хостинг для WordPress (WPHost.me) - повноцінного хостинг-сервісу, максимально оптимізованого на використання CMS WordPress.

Коментувати