ModRewrite e WordPress, un piccolo plugin

Ultimamente, facendo un paio di migrazioni di blog fatti con WordPress (e non) per clienti mi sono ritrovato con lo spigoloso problema dell’integrità delle url con la nuova struttura del blog. Il problema è stato per la maggior parte delle volte risolto con un alias sul server, dove non è stato possibile però ho dovuto aggiornare le Rewrite Rules generate da WordPress 2.x.

Il difetto di sovrascrivere le Rewrite Rules a mano è che al primo aggiornamento del blog engine le modifiche vengono perse. Ecco quindi che mi si è illuminata la classica lampadina di archimede ed ho scritto uno stupidissimo plugin che si aggancia agli hook delle funzioni che generano il file .htaccess aggiungendogli le regole che mi servono.

Vediamo come funziona il plugin.

Di per se il codice del plugin è veramente semplice, si aggiungono all’interno di un array le regole che si vogliono far generare e poi dall’interfaccia di WordPress si fanno aggiornare i permalink.

function fcc_rewrite_rule($rules) 
{
    // add here your new rules in the format:
    // Fake Url => Real Url
    $rules_array = array(
        '^blog/wp-content/uploads/(.*)$' => '/wp-content/uploads/$1'
    );

questa regola dice di redirezionare tutte le richieste fatte a nomesito.com/blog/wp-content/uploads/ direttamente su nomesito.com/wp-content/uploads/, in questo modo eventuali immagini salvate con url non più esistenti continueranno a essere correttamente inviate al browser.

    $home_root = parse_url(get_settings('home'));
    $home_root = trailingslashit($home_root['path']);
    $new_rules = 'RewriteBase '. $home_root . "\n";

    foreach ($rules_array as $k => $v) 
        $new_rules .= 'RewriteRule '.$k.' '.$v.' [R,L]'."\n";

    return str_replace('RewriteBase ' . $home_root, $new_rules, $rules);
}

add_action('mod_rewrite_rules','fcc_rewrite_rule');

successivamente mi occupo di rigenerare il codice che andrò ad aggiungere a quello creato normalmente da WordPress.

Quindi “magicamente” all’interno del .htaccess compariranno tutte le regolette ad ogni refresh dei permalink.

Per ora non ho creato un’interfaccia per il backend, anche perchè, visto il fatto che le RewriteRules non si cambiano tutti i giorni e che la “delicatezza” di quello che si va a modificare è molta, impedire all’utente base di metterci mano è il minimo. Inoltre le rule vengono applicate SOLO se il RewriteBase corrisponde con quello di default di WP.

Non è detto però che in futuro (per mia comodità) non realizzi qualcosa di più potente…

Per i più pigri il codice è scaricabile da qui: http://www.fullo.net/progetti/fcc_rewrite_rule.phps

ciuaz

  • Molto molto utile GRAZIE

  • Mi sarebbe servito qualche mese fa, in ogni caso sembra molto utile! :) Lo terrò presente per il futuro! :D

%d bloggers like this: