In questi giorni, per un sito amatoriale che ho contribuito a creare, mi sono incapponito nel voler attivare la modalità “search-engine friendly” di joomla. Ovviamente da buon CMS open-source l’unico supporto ufficiale ed immediato è per la mod_rewrite di Apache cosa di cui non dispongo perchè utilizzo IIS 6.0 e sul server Windows 2003 su cui lavoro è disponibile solo Ionic Isapi Rewrite Filter (IIRF).

Ipotizzando che chi legge quest’articolo sappia come installare questo filtro ISAPI mi soffermo solamente sulla parte che riguarda la configurazione di Joomla 1.0.x ed eventuali modifiche da fare al suo codice:

  • Prima di tutto creare nella root del sito di cui si desidera gestire la funzione “search-engine friendly” un file dal nome “iirf.ini” e copiarci dentro il seguente contenuto (sostanzialmente è lo stesso del file .htacess.txt con pochi ritocchi)

##########################################

RewriteLog d:\Web\Rewrite\tuosito.log
RewriteLogLevel 3
RewriteEngine On
# Prima serie di regole utilizzate per i componenti SEF, ovvero standard e base di joomla (sostanzialmente com_content)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_URL} (/|\.htm|\.php|\.html|/[^.]*)$  [NC]
# Questa riga è variata rispetto al file .htaccess.txt, in quanto IIRF, considera parte dell’url anche il carattere “/” appena dopo il nome del dominio.
# Attenzione al parametro [U] perché segnala al filtro ISAPI di aggiungere un header HTTP_X_REWRITE_URL che sarà poi usato per gestire correttamente le pagine
RewriteRule ^/(content/|component/)(.*) /index.php [U]
# Seconda serie di regole utilizzate per i componenti NON SEF, ovvero qualunque componente aggiuntivo
# Da notare come al posto di “REQUEST_URI” utilizzi la dicitura “SCRIPT_NAME”. Come molti sapranno purtroppo IIS non fornisce tra le servervariables l’url stessi, quindi dobbiamo ingegnarci per ricrearla o, come in questo caso, prelevare solo la parte che effettivamente ci interessa
RewriteCond %{SCRIPT_NAME} (/|\.htm|\.php|\.html|/[^.]*)$  [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Stessi accorgimenti della RewriteRule precedente
RewriteRule (.*) /index.php [U]
##########################################
  • Terminata questa prima fase entrare nell’area amministrativa di Joomla e attivare tra le impostazioni globali del sito la funzione “search-engine friendly url”. E’possibile trovarla nella linguetta “SEO”
  • A questo punto, dopo aver cancellato la cache dei contenuti per essere sicuro che tutte le modifiche siano state applicate è possibile già notare come il com_content dovrebbe già funzionare. Purtroppo gli altri componenti generano degli errori.
  • Per risolvere il problema dei componenti non-SEF è necessario aprire il file “joomla.php” che si trova nella cartella “includes” del sito. Attorno alla riga 91 dovreste trovare una dicitura simile a questa:

##########################################
………
if ( isset( $_SERVER['REQUEST_URI'] ) ) {
$request_uri = $_SERVER['REQUEST_URI'];
} else {
………
##########################################

  • Sostituite il testo sopra con la dicitura:

##########################################
………
if ( isset( $_SERVER['HTTP_X_REWRITE_URL'] ) ) {
$request_uri = $_SERVER['HTTP_X_REWRITE_URL'];
} elseif ( isset( $_SERVER['REQUEST_URI'] ) ) {
$request_uri = $_SERVER['REQUEST_URI'];
} else {
………
##########################################

  • Il gioco è fatto, ora finalmente avrete tutto il sito funzionante in modalità “search-engine friendly”. Ovviamente sarà da controllare bene il funzionamento dei componenti perchè alcuni di terza parti non supportano appieno questa modalità di funzionamento e potrebbero generare delle url errate (con conseguente errore 404).

Spero di esservi stato utile, forse non è la migliore soluzione possibile, ma per lo meno funziona!!!