WordPress offre una funzionalita' comodissima per favorire l'indicizzazione dei contenuti da parte dei motori si ricerca: i permalinks.

Questa funzione, utilizzando il modulo mod_rewrite di Apache, permette di convertire gli URL dei post in indirizzi piu' "amichevoli" sia per chi legge che (sopratutto!) per i motori di ricerca.

In pratica, utilizzando i permalinks, un URL come questo:

http://oldsite.andreafortuna.net/?p=57

diventa

http://oldsite.andreafortuna.net/2005/12/13/decodificato-il-filesystem-di-xbox360/

il tutto piu' leggibile sia da un utente che da un motore di ricerca.

Il tutto e' facilmente implementabile dalle opzioni di WordPress, ma con un limite: per utilizzare il mod_rewrite il blog deve essere necessariamente in hosting su server Apache.

Il mio blog invece e' hostato su server Microsoft IIS, come fare?

Dopo numerosi rimuginamenti e gironzolamenti su forum & newsgroups sono arrivato alla soluzione:

realizzare una pagina .php da utilizzare come error page personalizzata per gli errori di tipo 404 (file non trovato), intercettare quindi l'indirizzo richiesto e passarlo a index.php come farebbe il modulo mod_rewrite su Apache.

La realizzazione e' semplice:

  • Creare una pagina nella root del sito (ad esempio wp-error.php), contenente il codice seguente

$my_wp_url = "http://" . $_SERVER['SERVER_NAME'] . ":80/";

$_SERVER['REQUEST_URI'] = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], $my_wp_url)+strlen($my_wp_url));

$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];

//echo $_SERVER['PATH_INFO'];

include('index.php');

?>

  • Modificare (tramite il pannello di controllo del proprio hosting o direttamente dalla console di IIS) la pagina di errore 404 in modo da farla puntare all'URL /wp-error.php.
  • Attivare i permalinks dal pannello di amministrazione di WordPress.

L'unica eventuale modifica da fare allo script PHP e' la modifica della riga

$my_wp_url = "http://" . $_SERVER['SERVER_NAME'] . ":80/";

in

$my_wp_url = "http://" . $_SERVER['SERVER_NAME'] . ":80/indirizzo_blog/";

se il wordpress non e' installato nella root del sito (dove naturalmente /indirizzo_blog/ e' la cartella di installazione di WordPress).