.htaccess
è il file che controlla il webserver Apache; è molto utile e permette di fare un sacco di cose. In questo articolo, ho raccolto alcuni frammenti per il file .htaccess
che ogni sviluppatore web dovrebbe avere nella sua cassetta degli attrezzi.
Prima di modificare il file
Aggiungi automaticamente il charset utf-8 ai files.htaccess
, eseguire sempre un backup in modo da poterlo ripristinare in caso di necessità.⤽
Al fine di evitare problemi di codifica è possibile forzare una codifica specifica direttamente sul vostro file
Forzare lo slash finale negli URL.htaccess
. In questo modo, si potrà garantire che i vostri documenti HTML verranno sempre renderizzate correttamente, anche se dimenticate di aggiungere la direttiva <meta http-equiv=”Content-Type”
> sulle tue pagine html. (fonte [icon name=”external-link” class=”” unprefixed_class=””])
Copia codice
#
<FilesMatch "\.(htm|html|css|js)$">
AddDefaultCharset UTF-8
</FilesMatch>
#
⤽
Imporre lo slash finale su tutti gli URL, dal punto di vista SEO è molto utile e ai visitatori dà una sensazione di uniformità, visto che sito-web.com/cartella è diverso da sito-web.com/cartella/. A tale scopo basta fare uso del seguente codice nel file
Rimuovere www dall'url.htaccess
Copia codice
#
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
#
⤽
Per motivi di SEO, si potrebbe sempre rimuovere (o usare) il prefisso www nel vostro URL. Il frammento seguente toglie il www dal vostro URL del sito web e reindirizza qualsiasi url con www alla versione non-www. (fonte [icon name=”external-link” class=”” unprefixed_class=””])
Al contrario, se vogliamo aggiungere il prefisso www quando nell’url viene omesso.
Rimuovere le estensioni dei file dagli URL
Copia codice
#
RewriteEngine On
RewriteCond %{HTTP_HOST} !^sito-web.com$ [NC]
RewriteRule ^(.*)$ http://sito-web.com/$1 [L,R=301]
#
Copia codice
#
RewriteEngine On
RewriteCond %{HTTP_HOST} ^sito-web.com [NC]
RewriteRule ^(.*)$ http://www.sito-web.com/$1 [L,R=301]
#
⤽
Le estensioni dei file possono essere utili per gli sviluppatori, ma non c’è assolutamente bisogno di vederli per i tuoi visitatori. Questo frammento rimuoverà l’estensione
Prevenire elenco di directory.html
su qualsiasi file html. Naturalmente, questo codice può essere facilmente adattato per rimuovere le estensioni da altri file come .php
. (fonte [icon name=”external-link” class=”” unprefixed_class=””])
Copia codice
#
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
# Sostituire html con altraestensione di file
# ad esempio: php, htm, asp
#
⤽
Sul server web, quando una directory non dispone di un file
Prevenire lo hotlinkingindex
, Apache crea automaticamente un elenco di tutti i file della directory corrente. Se non vuoi che chiunque possa vedere quali file sono sotto la cartella corrente sul server, basta aggiungere il codice seguente al tuo file .htaccess
per impedire visualizzazione della lista automatica della directory.
Copia codice
#
Options -Indexes
#
⤽
Hotlinking è una cattiva pratica che consiste in utilizzare le immagini da un altro sito su quello proprio. Quando sei hotlinkato da qualcun altro, la larghezza di banda viene utilizzata per un profitto altrui. Naturalmente, si consiglia di evitare gli hotlinkers. Basta aggiungere il seguente frammento al tuo file
Abilitare i video di HTML5 sul sito.htaccess
per sostituire le richieste di determinati tipi di file dall’esterno con un altro, magari da pochi bites.
Copia codice
#
RewriteEngine On
#Replace ?sito-web\.com/ con il vostro URL del blog
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?sito-web\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Replace /images/nohotlink.jpg con url della immagine "no hotlink"
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
#
⤽
HTML5 offre grandi potenzialità tra cui la possibilità di inserire video in streaming senza bisogno del supporto di Flash. Ecco come fare per abilitare questa feature mediante
Permettere l'embed di un font.htaccess
Copia codice
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
AddType video/ogg .ogv
AddType video/ogg .ogg
AddType video/mp4 .mp4
AddType video/webm .webm
AddType application/x-shockwave-flash swf
#
⤽
Anche se si può ricorrere a Google Font senza dover configurare nulla, l’embed del font dai file esterni al vostro sito deve essere abilitato, in caso contrario alcuni browser come Firefox non li caricano.
Lanciare codice PHP dentro dei file JavaScript
Copia codice
#
<FilesMatch "\.(ttf|otf|eot|woff)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "http://sito-web.com"
</IfModule>
</FilesMatch>
#
⤽
Il modo più semplice per assegnare un valore ad una variabile dentro di un file .js è il seguente
Per fare questo potete fare uso del seguente frammento.
Creare pagine di errore personalizzatevar jsVar = "";
, ma in alcuni casi può essere comodo poter lanciare file PHP direttamente dentro file JS.Per fare questo potete fare uso del seguente frammento.
Copia codice
#
AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js
<FilesMatch "\.(js|php)$">
SetHandler application/x-httpd-php
</FilesMatch>
#
⤽
Stanchi delle vecchie pagine errori del tuo sito? Basta creare alcuni file html con l’aspetto desiderato, caricarli sul tuo server, e aggiungere quanto segue al file
Log errori di PHP.htaccess
. (fonte [icon name=”external-link” class=”” unprefixed_class=””])
Copia codice
#
ErrorDocument 400 /errors/badrequest.html
ErrorDocument 401 /errors/authreqd.html
ErrorDocument 403 /errors/forbid.html
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/serverr.html
#
⤽
Questo frammento è un modo interessante per registrare gli errori generati dal file php in un file di log. Basta creare un file php_error.log, salvarlo in qualche parte sul vostro server e aggiungere il seguente frammento al tuo file
Ridurre il peso delle pagine compremendo i dati statici.htaccess
. Non dimenticare di modificare il percorso del file di registro sulla linea 8. (fonte [icon name=”external-link” class=”” unprefixed_class=””])
Copia codice
#
# display no errs to user
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
# log to file
php_flag log_errors on
php_value error_log /percorso/verso/php_error.log
#
⤽
Lo sai che è possibile inviare dati compressi ai visitatori, che sarà poi decompresso dal cliente? Questo codice vi farà sicuramente risparmiare (e il vostro visitatore) la larghezza di banda e ridurre il peso pagine.
Download obbligato di alcuni tipi di file
Copia codice
#
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
#
⤽
Per fare in modo che i vostri visitatori possano scaricare dei file di un certo tipo quando ci cliccano sopra, senza vederlo dentro al browser come succede con il file
Impostare la caching per velocizzare il tuo sito.pdf
.
Copia codice
#
<Files *.xls>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
<Files *.pdf>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
#
⤽
La velocità di caricamento del sito è un vero e proprio fattore di ranking ed è una delle recommendation preferite da Google. Alcuni file statici come possono essere le immagini, il fogli di stile (css), ecc. possono una scadenza di validità per recuperarli dalla cache. Per ottenere questo risultato inserire il seguente codice.
Bloccare lo spam sul tuo sito in WordPress
Copia codice
#
# 1 ANNO
<FilesMatch "\.(ico|pdf|flv)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
# 1 SETTIMANA
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
# 2 GIORNI
<FilesMatch "\.(xml|txt|css|js)$">
Header set Cache-Control "max-age=172800, proxy-revalidate"
</FilesMatch>
# 1 MINUTO
<FilesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=60, private, proxy-revalidate"
</FilesMatch>
#
⤽
Quasi tutti gli spam di WordPress arriva dall’accesso diretto al file
Reindirizzare tutti i feed FeedBurner di WordPresswp-comments-post.php
, utilizzato dagli spam-bot per mandarvi commenti e link spazzatura. Perchè allora non impedire a loro l’accesso? Con queste righe di codice si evita questi accessi indesiderati.
Copia codice
#
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*nometuodominio.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
#
⤽
La maggior parte dei blogger utilizzano Feedburner: un servizio web che consente di sapere quante persone stanno leggendo il tuo blog via feed. Se usate WordPress è necessario reindirizzare tutti i feed WordPress (RSS, Atom, ecc) su FeedBurner. Modificare il percorso sulle linee 3 e 4, e quindi incollare il codice al tuo file
Unificare i formati feed RSS.htaccess
. (fonte [icon name=”external-link” class=”” unprefixed_class=””])
Copia codice
#
<IfModule mod_alias.c>
RedirectMatch 301 /feed/(atom|rdf|rss|rss2)/?$ http://feedburner.com/yourfeed/
RedirectMatch 301 /comments/feed/(atom|rdf|rss|rss2)/?$ http://feedburner.com/yourfeed/
</IfModule>
#
⤽
Sembrerebbe che i RSS sia diventato uno standard, quindi unificare i vari RSS (RSS, Atom e Rdf) sarebbe utile. Il seguente frammento di codice htaccess può essere utilizzato a tale scopo.
Redirect al sito mobile
Copia codice
#
<IfModule mod_alias.c>
RedirectMatch 301 /feed/(atom|rdf|rss|rss2)/?$ http://sito-web.com/feed/
RedirectMatch 301 /comments/feed/(atom|rdf|rss|rss2)/?$ http://sito-web/comments/feed/
</IfModule>
#
⤽
È possibile redirezionare al vostro sito mobile i dispositivi abilitati che visitano il sito in modo automatico con una piccola manipolazione del file
Conclusione.htaccess
.
Copia codice
#
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/m/.*$
RewriteCond %{HTTP_ACCEPT} "text/vnd.wap.wml|application/vnd.wap.xhtml+xml" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "acs|alav|alca|amoi|audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "dang|doco|eric|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|opwv" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|w3cs|wap-|wapa|wapi" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "wapp|wapr|webc|winw|winw|xda|xda-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "up.browser|up.link|windowssce|iemobile|mini|mmp" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "symbian|midp|wap|phone|pocket|mobile|pda|psp" [NC]
#------------- The line below excludes the iPad
RewriteCond %{HTTP_USER_AGENT} !^.*iPad.*$
#-------------
RewriteCond %{HTTP_USER_AGENT} !macintosh [NC] #*SEE NOTE BELOW
RewriteRule ^(.*)$ /m/ [L,R=302]
#
⤽
No pretende essere una lista esaustiva delle possibilità che ci offre la configurazione del server web Apache attraverso il file
.htaccess
, ma si un elenco di quelle più utilizzate e che, in varie occasioni, ho avuto bisogno di documentarmi. Se in futuro avrò neccessità di nuovi le aggiungerò a questa lista magari in una pagina figlia.
Ancora nessun commento