Есть ли в WP функция для генерации RewriteCond в .htaccess?
Я знаю, что могу редактировать .htaccess вручную и добавить туда директиву RewriteCond, но мне нужно создать плагин, который делает это правильно, используя механизм перезаписи URL в WordPress, который затем записывается в .htaccess с помощью flush_rewrite_rules(). В данном случае мне нужен именно RewriteCond.
Есть ли в WordPress какая-то малоизвестная функция, которая позволяет добавить директиву RewriteCond в .htaccess?

Коротко говоря, да...
'Внешние' правила перезаписи
Если в add_rewrite_rule
правило не направлено на index.php
, то оно рассматривается как 'внешнее' правило (т.е. не обрабатывается внутренним механизмом WordPress для перезаписи URL) и вместо этого записывается в файл .htaccess
. Например, если:
add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','somethingelse.php?p=12&food=$1 &variety=$2','top');
используется вместо
add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','index.php?p=12&food=$matches[1]&variety=$matches[2]','top');
Тогда правило распознается как не (внутреннее) правило WordPress и добавляется в файл .htaccess, а не обрабатывается внутренне. Обратите внимание для 'внешних' правил - вы используете $1
вместо $matches[1]
;
Добавление пользовательских правил в .htaccess
Когда правила перезаписи обновляются, файл .htaccess
перезаписывается. Существует хук, который фильтрует то, что фактически записывается. mod_rewrite_rules
function wpse50631_htaccess( $rules ){
//Добавляем или изменяем дополнительные правила.
return $rules;
}
add_filter('mod_rewrite_rules', 'wpse50631_htaccess');
В кодексе сказано следующее:
mod_rewrite_rules()
- это функция, которая берет массив, сгенерированный rewrite_rules(), и превращает его в набор правил перезаписи для файла.htaccess
. У этой функции также есть фильтр,mod_rewrite_rules
, который передает строка всех правил для записи в.htaccess
, включая секцию<IfModule>
. (Примечание: вы также можете увидеть плагины, использующие хук rewrite_rules, но он устарел).

Ага! Главное - это последний раздел, который у вас есть здесь в ванильной версии. Именно здесь я могу редактировать строку, которая записывается, и именно здесь я могу добавить RewriteCond.

@Volomike Важно отметить, что не каждая установка WordPress позволяет WordPress напрямую изменять .htaccess, так что не рассчитывайте на возможность...по крайней мере, выведите предупреждение и инструкции для ручного выполнения, если это не может быть сделано программно.
