Există în WP o funcție pentru generarea RewriteCond în .htaccess?

30 apr. 2012, 11:52:05
Vizualizări: 3.19K
Voturi: 2

Știu că pot edita manual .htaccess și pot adăuga o declarație RewriteCond în interior, dar am nevoie să construiesc un plugin care face acest lucru în mod corect prin utilizarea sistemului de rewrite-uri din WordPress, care apoi sunt introduse în .htaccess cu flush_rewrite_rules(). În acest caz, am nevoie de RewriteCond.

Există vreo funcție mai obscură în WordPress care să-mi permită să introduc o declarație RewriteCond în .htaccess?

0
Toate răspunsurile la întrebare 1
2

Pe scurt, da...

Reguli de rescriere 'Externe'

Dacă în add_rewrite_rule regula nu este direcționată către index.php, atunci regula este tratată ca o regulă 'externă' (adică nu este procesată de gestionarea internă a WordPress a rescrierilor) și este scrisă în fișierul .htaccess. Adică, dacă:

add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','somethingelse.php?p=12&food=$1 &variety=$2','top');

este folosit în loc de

add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','index.php?p=12&food=$matches[1]&variety=$matches[2]','top');

Atunci regula este recunoscută ca o regulă non (internă) WordPress și este adăugată în fișierul .htaccess în loc să fie gestionată intern. Notă pentru regulile 'externe' - folosiți $1 în loc de $matches[1];

Adăugarea de reguli personalizate în .htaccess

Când regulile de rescriere sunt actualizate, fișierul .htaccess este rescris. Există un hook care filtrează ceea ce este scris efectiv. mod_rewrite_rules

function wpse50631_htaccess( $rules ){
   //Adaugă sau prepend reguli suplimentare.
   return $rules;
}
add_filter('mod_rewrite_rules', 'wpse50631_htaccess');

Codex-ul spune următoarele:

mod_rewrite_rules() este funcția care preia array-ul generat de rewrite_rules() și îl transformă într-un set de reguli de rescriere pentru fișierul .htaccess. Această funcție are și un filtru, mod_rewrite_rules, care va transmite funcțiilor șirul tuturor regulilor care trebuie scrise în .htaccess, inclusiv secțiunea <IfModule> care o înconjoară. (Notă: este posibil să vedeți și plugin-uri care folosesc hook-ul rewrite_rules, dar acesta este depreciat).

30 apr. 2012 12:09:04
Comentarii

Aha! Principalul lucru este acea ultimă secțiune pe care o ai aici în versiunea vanilla. Aici pot edita șirul care este scris și aici pot adăuga RewriteCond.

Volomike Volomike
30 apr. 2012 12:34:13

@Volomike Este indicat să reții că nu fiecare instalare WordPress permite modificarea directă a fișierului .htaccess, așa că nu te baza pe posibilitatea de a... cel puțin aruncă un avertisment și câteva instrucțiuni pentru a face acest lucru manual dacă nu poate fi făcut programatic.

mor7ifer mor7ifer
30 apr. 2012 12:38:07