web-dev-qa-db-fra.com

Est-ce que WP Avoir une fonction pour générer .htaccess RewriteCond?

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?

2
Volomike

En bref oui ...

Règles de réécriture 'externes'

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];

Ajout de règles personnalisées à .htaccess

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');

Le codex dit ceci:

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).

6
Stephen Harris