Есть ли в WP функция для генерации RewriteCond в .htaccess?

30 апр. 2012 г., 11:52:05
Просмотры: 3.19K
Голосов: 2

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

Есть ли в WordPress какая-то малоизвестная функция, которая позволяет добавить директиву RewriteCond в .htaccess?

0
Все ответы на вопрос 1
2

Коротко говоря, да...

'Внешние' правила перезаписи

Если в 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, но он устарел).

30 апр. 2012 г. 12:09:04
Комментарии

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

Volomike Volomike
30 апр. 2012 г. 12:34:13

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

mor7ifer mor7ifer
30 апр. 2012 г. 12:38:07