Redirigere la chiamata a file non esistenti
Restando in tema di file .htaccess
, condivido con voi qualche modifica che ho introdotto recentemente dopo aver dato uno sguardo al registro degli errori del mio hosting provider. Tra le righe presenti notavo che si tentava si accedere ripetutamente al file favicon.ico
sia cercandolo nella directory radice del sito (dove non è presente) sia in altre posizioni, nonostante la chiamata al file favicon.ico
era correttamente generata nell’HTML dal tema in uso.
Per questo motivo ho aggiunto alcune righe in .htaccess
, in modo da dirigere la ricerca del file in questione.
Il file favicon.ico
Ecco cosa ho aggiunto nel file di configurazione di Apache:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/percorso/a/favicon\.ico [NC]
RewriteCond %{REQUEST_URI} favicon\.ico [NC]
RewriteRule .* http://www.example.com/percorso/a/favicon.ico [R=301,L]
</IfModule>
Queste righe fanno le seguenti operazioni:
- controllare se è presente il modulo mod_rewrite in Apache;
- attivare il motore di rewrite;
- porre la prima condizione: l’URL richiesto non è quello del file
favicon.ico
corretto; - porre la seconda condizione: l’URL contiene la stringa
favicon.ico
; - avviare la regola: indirizza la richiesta alla posizione corretta e applica uno status HTTP 301 “Moved permanently”.
Così, ad esempio, uno qualsiasi dei seguenti indirizzi:
http://www.example.com/files/favicon.ico
http://www.example.com/tag/apache/favicon.ico
viene indirizzato a:
http://www.example.com/percorso/a/favicon.ico
dove è presente fisicamente il file.
Altri file
Il file favicon.ico
non è il solo ad essere vittima di questa ricerca errata, ma anche robots.txt
, sitemap.xml
e humans.txt
. Possiamo quindi aggiungere anche queste righe, dove ogni blocco di righe si riferisce a uno specifico file:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/robots\.txt [NC]
RewriteCond %{REQUEST_URI} robots\.txt [NC]
RewriteRule .* http://www.domain.tld/robots.txt [R=301,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/sitemap\.xml [NC]
RewriteCond %{REQUEST_URI} sitemap\.xml [NC]
RewriteRule .* http://www.domain.tld/sitemap.xml [R=301,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/humans\.txt [NC]
RewriteCond %{REQUEST_URI} humans\.txt [NC]
RewriteRule .* http://www.domain.tld/humans.txt [R=301,L]
</IfModule>
Potete trovare l’argomento spiegato più in dettaglio nel libro di Jeff Starr, .htaccess made easy, A practical guide for administrators, designers & developers, Perishable Press, 2013, di cui vi ho già parlato in questo precedente post.
Photo courtesy: peterstuartmill, Senza titolo, CC0 Public Domain.