WordPress e htaccess
Indice
Sto cominciando ad interessarmi ad htaccess che, come sapete, consente di impostare le regole per l’accesso alle directory presenti nel proprio spazio sul server web. Se volete, ad esempio, impedire momentaneamente l’accesso ai file del vostro sito o volete impedire l’hotlinking delle vostre immagini o volete impedire l’accesso a chi proviene da un particolare sito che vi linka… potete farlo impostando le regole specifiche nel file .htaccess
presente (si spera) nella root del vostro blog/sito. Sono tantissime le cose che potete impostare: qui me ne sono appuntate alcune che condivido con voi. Ovviamente per fare una determinata operazione si può scrivere una regola in un modo o in un altro: l’importante è ottenere lo stesso effetto.
È un argomento del tutto nuovo per me e, per questo, mi sono documentato un po’ in rete: ho trovato estremamente interessante il blog di Perishable, una vera miniera! Potete dare un’occhiata anche al tag htaccess dei miei bookmark su Delicious.
Il titolo di questo articolo, forse, non è appropriatissimo, visto che le regole che si impostano qui valgono per qualunque sito anche non gestito da questo CMS.
L’.htaccess di WordPress
Quando installiamo WordPress per la prima volta, dovremmo trovare automaticamente un nuovo file nella nostra root chiamato .htaccess
, contenente le regole di base. Qualora non ci fosse (molto strano), WordPress ne genera uno se andiamo nella pagina Permalink del pannello di amministrazione e facciamo clic su Salva le modifiche, anche senza aver modificato nulla. WordPress, in questo caso:
- se il file esiste, aggiunge le sue regole in coda;
- se il file non esiste, ne genera uno.
Ecco le regole che imposta:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Impediamo l’hotlinking
L’hotlinking è, in parole dure, un furto di banda. Capita che qualche blogger sia interessato ad un nostro articolo e faccia copia e incolla dell’articolo, portandosi dietro anche il codice che linka ad una eventuale nostra immagine che risiede nel nostro server. In questo modo, quando si visualizza l’immagine nel suo blog, questa viene prelevata dal nostro sito, utilizzando dunque banda nostra.
Per impedire ciò aggiungiamo queste regole al file .htaccess
:
### PROTEZIONE HOTLINK ###
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g?|png)$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?dominio\. [NC]
RewriteRule \.(gif|jpe?g?|png)$ - [F,NC,L]
</ifModule>
Vediamo cosa significano le righe:
- La prima riga è un commento.
- La seconda controlla che mod rewrite sia presente sul server.
- La terza abilita il motore di rewrite.
- La quarta permette le richieste di referer che non specifichino il file dell’immagine.
- La quinta controlla che il file richiesto esista.
- La sesta controlla quale sia la parte finale del file richiesto.
- La settima permette le richieste provenienti da “dominio”.
- L’ottava è l’azione da eseguire: dà un errore 403 se viene richiesto uno dei file elencati.
- La nona chiude il processo.
Queste righe possono essere aggiunte al file .htaccess
che già avete nella vostra root. Ovviamente, sostituite “dominio” con quello vostro. Ad esempio, se il vostro sito si trova a http://www.miosito.it, dovrete inserire solo “miosito” al posto di “dominio”. Potete anche aggiungere altre estensioni oltre quelle già inserite: eventualmente modificate sia la 6a che la 8a riga. Per fare una prova se avete inserito correttamente le regole, potete andare qui e inserire l’indirizzo di una immagine presente nel vostro sito. Prima di premere il pulsante, però, svuotate la cache del browser, altrimenti vedrete ugualmente l’immagine, perché il browser la preleva da lì.
Se invece di servire un errore 403 volete far visualizzare una immagine specifica, sostituite la riga n. 8 con queste due:
RewriteCond %{REQUEST_URI} !^/hotlink\.jpg$ [NC]
RewriteRule \.(gif|jpe?g?|png)$ http://www.vostrosito/hotlink.jpg [R,NC,L]
cambiando /hotlink
nella prima riga con la posizione dell’immagine da visualizzare e http://www.vostrosito/hotlink.jpg
con l’URL dell’immagine desiderata.
Ecco un esempio di applicazione:

L’immagine originale a sinistra veniva prelevata direttamente dal mio spazio e, applicando queste regole, ecco cosa viene visualizzato al suo posto (immagine a destra).
Chiaramente, sta a voi usare con prudenza questo sistema, siate consapevoli di quello che fate e siate responsabili. Evitate di far visualizzare immagini che turbino la sensibilità di chi può commettere un errore e di chi visita il sito di chi l’errore lo compie.
Aggiunta di eccezioni
Ovviamente queste regole bloccano qualunque sito che prelevi le immagini dal vostro spazio, compresi servizi legittimi come Google Reader, FeedBurner, i motori di ricerca e magari il planet del vostro progetto opensource. Per evitare che ciò avvenga inseriamo le regole che consentano a specifici servizi di accedere ai file bloccati.
La riga di eccezione è questa:
RewriteCond %{HTTP_REFERER} !^url-sito$ [NC]
per cui basta sostituire url-sito
con la URL e avrete finito. Eccovi alcuni esempi:
FeedBurner
RewriteCond %{HTTP_REFERER} !^http://www.feedburner.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://feeds.feedburner.com/vostro-nick$ [NC]
Google Reader
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/view/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.google.com/reader/m/view/.*$ [NC]
Motori di ricerca
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
Con questo sistema potete inserire tutti i siti che vi interessano. Ad esempio, la riga di eccezione per il planet di ubuntu-it potrebbe essere così:
RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?planet.ubuntu-it\. [NC]
Le righe vanno inserite dopo la 7a, cioè sotto al primo referer abilitato (cioè il vostro sito).
Reindirizzamento temporaneo
Potrebbe tornarci utile redirigere il traffico entrante, anche solo momentaneamente, verso una pagina ben precisa del nostro sito o verso una pagina esterna. Ad esempio, se stiamo facendo lavori di manutenzione sul sito e non vogliamo renderlo disponibile, possiamo inserire una regola temporanea nell’.htaccess
, per poi toglierla (o commentarla) quando avremo finito. Lo stesso risultato può ottenersi comodamente con un plugin, ma credo che con questo sistema si soddisfi di più il nostro desiderio di capire come funzioni un servizio web. L’essere o mostrarsi più geek non centra nulla qui: penso sia più istruttivo mettere mano con competenza e serietà ad htaccess che usare un plugin che dovrebbe ottenere lo stesso effetto.
Ecco la regola:
### REINDIRIZZAMENTO TEMPORANEO ###
<Limit GET POST PUT>
order deny,allow
deny from all
## AGGIORNARE IL SEGUENTE NUMERO IP CON QUELLO ATTUALMENTE VOSTRO!! ##
allow from 123.45.6.789
</LIMIT>
ErrorDocument 403 /vostro-file.html
<Files vostro-file.html>
order allow,deny
allow from all
</Files>
Attenzione alle righe da sostituire: quella col numero IP del vostro PC e del file html (2 volte) dove volete siano reindirizzati i vostri visitatori.
Reindirizzamento per chi proviene da un particolare dominio
Se per un motivo qualsiasi non vogliamo ricevere visite indirizzateci da un particolare dominio, possiamo aggiungere questa regola:
### REINDIRIZZAMENTO PER CHI PROVIENE DA UN DOMINIO ###
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} .*dominio.it.*
RewriteRule (.*) http://www.dominio.com [R=301,L]
</IfModule>
Sostituite dominio.it
con il dominio di chi vi linka e http://www.dominio.com
con l’URL del sito dove volete reindirizzare chi arriva a voi da quel sito.
Anche in questo caso, usate con prudenza il reindirizzamento, siate consapevoli di quello che fate e siate responsabili. Evitate il reindirizzamento a siti che turbino la sensibilità di chi vi visita.
Se avete intenzione di inserire regole per htaccess nei commenti a questo articolo, credo che WordPress sostituirà alcuni caratteri. Usate un servizio Pastebin oppure discutiamone nel forum.