WordPress e htaccess

Il file .htaccess presente nella root del nostro spazio web ci consente di determinare alcuni comportamenti di Apache. In questo articolo tre esempi concreti di applicazione per proteggere WordPress e i contenuti.

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:

  1. se il file esiste, aggiunge le sue regole in coda;
  2. 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:

  1. La prima riga è un commento.
  2. La seconda controlla che mod rewrite sia presente sul server.
  3. La terza abilita il motore di rewrite.
  4. La quarta permette le richieste di referer che non specifichino il file dell’immagine.
  5. La quinta controlla che il file richiesto esista.
  6. La sesta controlla quale sia la parte finale del file richiesto.
  7. La settima permette le richieste provenienti da “dominio”.
  8. L’ottava è l’azione da eseguire: dà un errore 403 se viene richiesto uno dei file elencati.
  9. 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 destra veniva prelevata direttamente dal mio spazio e, applicando queste regole, ecco cosa viene visualizzato al suo posto.

Note
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 è 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.

Note
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.
Note
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.

Autore: Aldo Latino

Aldo Latino usa con entusiasmo Linux nella distribuzione Ubuntu, è un appassionato di WordPress e si diletta a fare il blogger. Ha anche una lista dei desideri. Per altre informazioni visita la sua .

10 pensieri riguardo “WordPress e htaccess”

  1. Dove dovrebbe essere situato .htaccess? In wp-admin?
    Non riesco a trovarlo da nessuna parte, neanche impostando l’opzione “Visualizza file nascosti” su Filezilla. L’host è byethost.
    A cosa è dovuto?

    1. L’.htaccess di cui parlo io è quello presente nella directory root della tua installazione WordPress. Ma non è detto che questo file ci debba essere: lo trovi senz’altro, invece, se attivi i permalink di WordPress.

      In ogni caso, puoi sempre crearlo tu e impostare le regole che preferisci, facendo estrema attenzione.

  2. Ciao Aldo,

    scusami se magari questo commento non c’entra tantissimo con l’articolo.
    Sto aiutando un amico ad installare wordpress sul suo spazio Aruba (server GNU/Linux). Abbiamo usato l’application installer dal pannello di amministrazione ma l’installazione è terminata con un errore. Ora vorrei cancellare la directory di wordpress e ritentare, ma dal File Manager non riesco a toglierla di mezzo (se non eliminando uno ad uno i file…). C’è un modo – forse proprio tramite .htaccess… – di fare tutto in un solo colpo?

    Grazie

    1. Ciao Alessio, puoi gestire facilmente i file tramite un client FTP come FileZilla che trovi anche nei repository di Ubuntu (se lo usi): con quello puoi cancellare intere directory con un solo clic.

      Poi, come mai usi l’Application installer di Aruba? Non è difficile installarlo manualmente.

      Dimenticavo: .htaccess non serve per questo genere di operazioni.

      1. Grazie mille Aldo,

        hai ragione, userò filezilla per fare piazza pulita e installerò wp a mano.
        Avevo scelto la via “aruba-only” più che altro perché il mio amico non è praticissimo e gli volevo evitare strumenti esterni.
        Grazie ancora, un salutone! :)

I commenti sono chiusi