Je sais que je peux éditer .htaccess manuellement et ajouter une instruction RewriteCond à l'intérieur, mais je dois créer un plugin qui le fait correctement en utilisant WP réécritures qui sont ensuite poussées dans .htaccess avec flush_rewrite_rules () . J'ai besoin de RewriteCond dans ce cas.
Est-ce que WP a une fonction obscure qui me permet d'insérer une instruction RewriteCond dans le fichier .htaccess?
En bref oui ...
Si, dans add_rewrite_rule
, la règle n'est pas dirigée vers index.php
, elle est traitée comme une règle 'externe' (c'est-à-dire qu'elle ne doit pas être traitée par le traitement interne des réécritures par WordPress) et est plutôt écrite dans le fichier .htaccess
. C'est à dire. si:
add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','somethingelse.php?p=12&food=$1 &variety=$2','top');
est utilisé à la place de
add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','index.php?p=12&food=$matches[1]&variety=$matches[2]','top');
Ensuite, la règle est reconnue comme une règle WordPress non (interne) et est ajoutée au fichier .htaccess plutôt qu’elle est traitée en interne. Remarque pour les règles 'externes' - vous utilisez $1
au lieu de $matches[1]
;
Lorsque les règles de réécriture sont vidées, le fichier .htacess
est écrit. Il y a un crochet qui filtre ce qui est réellement écrit. mod_rewrite_rules
function wpse50631_htaccess( $rules ){
//Append or preppend extra rules.
return $rules;
}
add_filter('mod_rewrite_rules', 'wpse50631_htaccess');
mod_rewrite_rules()
est la fonction qui prend le tableau généré par rewrite_rules () et le transforme en un ensemble de règles de réécriture pour le fichier.htaccess
. Cette fonction a également un filtre,mod_rewrite_rules
, qui passera à la chaîne de toutes les règles à écrire dans.htaccess
, y compris la section entourant<IfModule>
. (Remarque: vous pouvez également voir des plugins utiliser le hook rewrite_rules, mais celui-ci est obsolète).