Linux:Htaccess
From Aino Wiki
l'.htaccess (hypertext access) è un file di configurazione a livello di file-system directory supportato in diversi web servers (come Apache), che consente di decentralizzare la gestione della configurazione del web server. E' in grado di sovrascrivere la configurazione globale del server per una specifica directory in cui si trova e TUTTE le cartelle contenute in cascata. Contiene un elenco di direttive interpretate runtime.
Scopo originario dell'.htaccess come dice il suo nome, è quello di consentire il controllo di accessi a livello di directory, per esempio richiedendo la password per accedere al contenuto. Oggi è anche usato per sovrascrivere impostazioni includendo anche la definizione della tipologia del contenuto, CGI handlers, etc. (da wikipedia)
Ha la stessa sintassi del file di configurazione di Apache, l'httpd.conf .
Contents
- 1 Vantaggi
- 2 Svantaggi
- 3 Alcuni esempi, con descrizione
- 4 Mini guida
- 4.1 Documentazione di errori
- 4.2 Protezione con password
- 4.3 Abilitazione SSI
- 4.4 Blocco IP
- 4.5 Blocco utenti\siti mediante referrer
- 4.6 Cambio pagina di default per la directory
- 4.7 Redirect
- 4.8 Prevenzione visualizzazione htaccess
- 4.9 Aggiunta di MIME types
- 4.10 Prevenzione hot linking nelle immagini etc
- 4.11 Prevenzione visualizzazione contenuto directory
- 4.12 Conclusioni
Vantaggi
Consente una modifica immediata senza necessità di riavvio del web server, ciò è indispensabile nell'hosting condiviso (shared hosting). Consente personalizzazioni a livello di utente in server multi user, come per lo shared hosting appunto.
Svantaggi
Il suo compito lo svolge a discapito delle prestazioni. Infatti ad ogni richiesta HTTP c'è un accesso al file system per interpretare eventuali .htpaccess.
E' possibile migrare in automatico da .htaccess a httpd.conf.
Alcuni esempi, con descrizione
IfModule
Definisce una sezione all'interno della quale eseguire delle direttive. La sezione è eseguita solo se la condizione è verificata, le condizioni riguardano la presenza o meno di moduli inclusi nel httpd di Apache.
es: <IfModule mod_php5.c> php_flag engine 0 </IfModule> si può usare anche !, nel precedente esempio sarebbe: <IfModule !mod_php5.c>
Mini guida
Documentazione di errori
In caso di errori HTTP (HTTP status code e errori) come 400, 401, 403, 404, 500, ne consente la gestione ridirezionando verso una pagina descrittiva. es:ErrorDocument code /directory/filename.ext
oErrorDocument 404 /errors/notfound.html
Lo slash / rappresenta la root del sito.
Protezione con password
es, indicando prima lo username e poi la password:wsabstract:y4E7Ep8e7EYV
Abilitazione SSI
Quando non si riesce ad usare l' SSI (HTML Server Side Include) perché il provider lo vieta è possibile usarlo via .htpaccess. (Attenzione l'uso può esser considerato 'hacking' o violazione delle regole dell'hosting).
Esempio:
AddType text/html .shtml AddHandler server-parsed .shtml Options Indexes FollowSymLinks Includes
La prima linea dice al server che le pagine con estensione .shtml sono valide.
La seconda linea aggiunge un handler in tutti i files con estensione .shtml.
L'ultima è un tecnicismo.
Blocco IP
es:
order allow,deny deny from 123.45.6.7 deny from 012.34.5. allow from all
Blocco utenti\siti mediante referrer
Per bloccare specifici utenti o traffico da determinati siti. Quest'ultima attività è chiamata 'referral' ed avviene anche quando su altri siti puntano a immagini/risorse che sono sul proprio sito. Tutto ciò si evincve dai logs del proprio sito.
Attenzione, bloccare gli accessi attraverso con referrer nell'htpaccess richiede che sia installato un modulo apache il mod_rewrite esempio di ridirezionamento da sito X:
RewriteEngine on # Options +FollowSymlinks RewriteCond %{HTTP_REFERER} badsite\.com [NC] RewriteRule .* - [F]
La linea con "Options +FollowSymlinks" va scommentata se il tuo server non è configurato con FollowSymLinks nella sua sezione in httpd.conf, e tu hai un errore 500 (Internal Server error) quando usi il codice di prima così com'è.===Blocchi 'bad bots' e site rippers===
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR] RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR] RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR] RewriteCond %{HTTP_USER_AGENT} ^Custo [OR] RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR] ... RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR] RewriteCond %{HTTP_USER_AGENT} ^Zeus RewriteRule ^.* - [F,L]
Cambio pagina di default per la directory
Si vuol cambiare il file di ingresso di default ad es da 'index.php' a 'filename.html':
DirectoryIndex filename.html
Oppure in alternativa se ne posson indicare diversi in sequenza separati da spazi:
DirectoryIndex filename.html index.cgi index.pl default.htm
Redirect
In caso di modifiche significative al sito affinché l'utente non abbia disagi lo si può ridirezionare su una pagina di cortesia. Per una sola pagina (la sintassi definisce un cambiamento da una pagina 'oldfile.html' alla definitiva anche su altro sito):
Redirect /olddirectory/oldfile.html http://yoursite.com/newdirectory/newfile.html
Per dirottare l'intero contenuto di una directory:
Redirect /olddirectory http://yoursite.com/newdirectory/
Prevenzione visualizzazione htaccess
order allow,deny deny from all
Aggiunta di MIME types
Se il sito non è abilitato a determinati contenuti ecco come eludere il problema:
AddType application/x-shockwave-flash swf
Prevenzione hot linking nelle immagini etc
Esempio:
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC] RewriteRule \.(gif|jpg|js|css)$ - [F]
Prevenzione visualizzazione contenuto directory
Per non visualizzare nulla:
IndexIgnore *
per escludere solo le immagini
IndexIgnore *.gif *.jpg
Se il server è configurato per negare la visualizzazione del contenuto ma tu vuoi comunque far vedere il contenuto di una cartella:
Options +Indexes
al contrario per non visualizzare nulla:
Options -Indexes
Questo però vale per la directory corrente mentre se lo si vuole applicare ricorsivamente ad ogni sotto directory occorrerà aggiungere All:
Options All -Indexes
ATTENZIONE però, l' All mi è capitato di vedere che genera un ERRORE tracciato nel log di apache: "Option All not allowed"
Conclusioni
Per un elenco completo delle direttive Apache usabili in un file .htpaccess dare un'occhiata al sito: apache.org.