Scenario: molti cms, primo fra tutti WordPress, permettono di impostare la generazione automatica di friendly url per migliorare il seo di un sito web. L’abilitazione di tale funzione, che sfrutta il modulo rewrite (mod_rewrite.c) di Apache, è una delle configurazioni di base che ogni web developer dovrebbe eseguire in fase di installazione della piattaforma attraverso l’apposito file .htaccess.

Il codice proposto dallo stesso WordPress che solitamente si utilizza per abilitare il rewriting e far così scomparire dalla url “index.php” è il seguente:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Questa regola eseguirà il rewrite di ogni percorso della url sott’intendendo la presenza di /index.php

Problema: può però essere necessario escludere una cartella (o più) da questa regola generale per caricare ad esempio file che devono essere accessibili attraverso un link diretto o script di varia utilità.

Soluzione: è possibile modificare la regola in modo da segnalare una directory (o più) che faccia eccezione rispetto alla regola generale attraverso la seguente istruzione:

RewriteCond %{REQUEST_URI} !^/(Cartella1|Cartella2|Cartella3).*$

Ecco come apparirà il blocco di codice completo:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_URI} !^/(Cartella1|Cartella2|Cartella3).*$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>