Una regola è troppo poca, due sono troppe

Ottima invenzione l’htaccess, peccato che sia anche una delle cause più frequenti di grattacapo e mal di testa.

Questa mattina ricevo un’email di Simone che mi avvisa di un problema sul sito. Accedento al blog dall’indirizzo http://simonecarletti.com/blog si viene reindirizzati alla pagina http://www.simonecarletti.com/blog//home/simonecarletti/simonecarletti.com/blog che genera (ovviamente) un errore 404.

In questi giorni sto lavorando allo sviluppo di questo sito (a presto ulteriori dettagli) che, basandosi su Rails e Movable Type, spreme a dovere l’uso del file .htaccess.

Indagando il problema ho notato che sembra verificarsi solo in questo caso specifico. Nei casi seguenti nessun problema:

  • http://simonecarletti.com/ reindirizza a http://www.simonecarletti.com/
  • http://simonecarletti.com reindirizza a http://www.simonecarletti.com/
  • http://simonecarletti.com/blog/ reindirizza a http://www.simonecarletti.com/blog/
  • http://simonecarletti.com/pagina reindirizza a http://www.simonecarletti.com/pagina

Purtoppo sembra che, nel caso in cui si acceda all’indirizzo corrispondente al blog senza lo /, la riscrittura automatica di Apache per normalizzare un percorso ad una cartella aggiungendo lo / vada in conflitto con le altre regole.

Potete provare voi stessi. Il contenuto dei due .htaccess presenti nelle cartelle /.htaccess e /blog/.htaccess è il seguente.

# Redirect www-less to www version of the website
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.simonecarletti.com$ [NC]
RewriteRule ^(.*)$ http://www.simonecarletti.com/$1 [L,R=301]

Sto ancora tentando di trovare una soluzione elegante al problema. Se qualcuno avesse proposte, ogni suggerimento è ben accetto.

Nota 1. Rimuovendo la direttiva sopra indicata dal file /blog/.htaccess il sistema funziona correttamente. Nota 2. Non posso rimuovere quella direttiva per diversi motivi.