Есть ли в 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
@Volomike Важно отметить, что не каждая установка WordPress позволяет WordPress напрямую изменять .htaccess, так что не рассчитывайте на возможность...по крайней мере, выведите предупреждение и инструкции для ручного выполнения, если это не может быть сделано программно.
mor7ifer