Serverplan, `Rewriterule` di `mod_rewrite` e regola inspiegabilmente ignorata | Ing. Eugenio Bonifacio
Tags: applicazioni sms, applicazioni web, cataloghi elettronici, commercio elettronico, consulenza agenzie web, consulenza opensource, consulenza oscommerce, consulenza Drupal, consulenza Wordpress, consulenza Zend Framework, e-commerce, portali web, sistemi di prenotazione, sistemi informativi, siti web comiso, siti web ragusa, siti web sicilia, software personalizzati, sviluppo firmware, programmatore php freelance, sviluppatore zend framework, sviluppatore doctrine, programmatore zend framework, programmatore doctrine, sviluppatore cakephp
20
Giu 12

Serverplan, `Rewriterule` di `mod_rewrite` e regola inspiegabilmente ignorata

 

Di recente mi sono trovato a caricare un file .htaccess su uno spazio di hosting condiviso di Serverplan. Il file contiene delle regole per il motore di rewrite mod_rewrite di Apache:

SetEnv APPLICATION_ENV production
 
RewriteEngine On
 
RewriteRule \.ico$ - [NC,L]
RewriteRule ^images - [NC,L]
RewriteRule ^swf - [NC,L]
RewriteRule ^img - [NC,L]
RewriteRule robots\.txt$ - [NC,L]
 
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

L'esigenza è quella di non impegnare il motore dell'applicazione quando si tratta di file che non hanno bisogno di essere processati, come ad esempio le richieste che i bot fanno al file robots.txt o i browser che cercano favicon.ico. Guardando i log di apache infatti ho notato diverse chiamate di questi file che vengono processate dall'applicazione Zend Framework, in quanto non sono presenti sul server.  In locale tutto funzionava ma il problema è sorto dopo aver caricato il file sullo spazio web. Provando a chiamare l'indirizzo http://www.dominio.com/robots.txt invece di restituirmi la classica pagina di 404 not found di apache, mi veniva mostrata la pagina della mia applicazione, che ovviamente cerca di interpretare l'url come MVC e va in errore. Dopo qualche ora di indagine, trattandosi di problema non analizzabile, vado a tentativi e scopro che quando chiamo il file robots.txt, il server cerca di processare 404.shtml!!! Ovviamente il tutto in maniera trasparente, giusto per complicare le cose. Probabilmente cPanel reindirizza alla pagina di errore personalizzabile, ancor prima di processare l'htaccess e in maniera analoga. La pagina, a sua volta, non essendoci, viene ridata in pasto al mod_rewrite. Ho risolto semplicemente aggiungendo una regola che ignora le pagine di errore personalizzabili:

SetEnv APPLICATION_ENV production
 
RewriteEngine On
 
RewriteRule ^(404|401|403|400|500) - [NC,L]
 
RewriteRule \.ico$ - [NC,L]
RewriteRule ^images - [NC,L]
RewriteRule ^swf - [NC,L]
RewriteRule ^img - [NC,L]
RewriteRule robots\.txt$ - [NC,L]
 
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Come dire, buono a sapersi!

Grazie per la segnalazione

I nostri complimenti all'autore del post per questa utilissima guida ed un ringraziamento per aver segnalato il nostro servizio ai propri lettori.

Abbiamo aggiunto il riferimento alla guida nel nostro archivio, così da poterla segnalare ai clienti che ne avessero bisogno.

Buona giornata, Serveprlan Team