Guida .htaccess: Trucchi utili per Htaccess

Cerchi dei trucchi o degli snippet per ottimizzare il tuo file .htaccess allora sei nel posto giusto.

Ho creato una guida sul file .htaccess raccogliendo tutte le informazioni che ho acquisito con la mia esperienza e altre trovate in rete.

Questa lista sarà sempre aggiornata (tempo permettendo).

Pronto? Cominciamo.

Reindirizzare il tuo vecchio dominio verso il nuovo – Redirect 301 con .htaccess

Redirect 301 /vecchiapagina.html http://www.tuosito.com/nuovapagina.html

 

Reindirizzare l’intero sito con .htaccess

Redirect 301 / http://nuovosito.com/

 

Abilitare la compressione Gzip con .htaccess

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

oppure

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml 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
</IfModule>

oppure

SetOutputFilter DEFLATE
AddOutputFilter DEFLATE text/plain
AddOutputFilter DEFLATE text/xml
AddOutputFilter DEFLATE application/xhtml+xml
AddOutputFilter DEFLATE text/css
AddOutputFilter DEFLATE application/xml
AddOutputFilter DEFLATE image/svg+xml
AddOutputFilter DEFLATE application/rss+xml
AddOutputFilter DEFLATE application/atom_xml
AddOutputFilter DEFLATE application/x-javascript
AddOutputFilter DEFLATE application/x-httpd-php
AddOutputFilter DEFLATE application/x-httpd-fastphp
AddOutputFilter DEFLATE application/x-httpd-eruby
AddOutputFilter DEFLATE text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.avi$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mov$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mp4$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.rm$ no-gzip dont-vary
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch ^MSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.iso$ no-gzip dont-vary

Aggiungere Expire Headers

<FilesMatch "\.(ico|jpg|jpeg|png|gif|js|css|swf)$">
Header set Expires "Tue, 16 Jun 2020 20:00:00 GMT"
</FilesMatch>

oppure

# Enable expirations
ExpiresActive On
# Default directive
ExpiresDefault "access plus 1 month"
# My favicon
ExpiresByType image/x-icon "access plus 1 year"
# Images
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
# CSS
ExpiresByType text/css "access 1 month"
# Javascript
ExpiresByType application/javascript "access plus 1 year"

Nota sugli Expires Header in wordpress

ACCEDI AI TOP TOOLS & CONSIGLI SEO

L’aggiunta degli expires headers non influisce sul tempo di caricamento della pagina per la prima visita, ma per le visite successive fatte dai visitatori di ritorno.  Puoi monitorare il tuo sito sapendo il numero di queries effettuate e il tempo impiegato incollando questa riga di codice sul tuo file footer.php

<?php echo get_num_queries(); ?> queries in <?php timer_stop(1); ?> secondi.

 Evitare hotlinking delle immagini

Vuoi evitare che qualcuno prenda le immagini del tuo sito senza permesso? Come già saprai molti web master (pigri) preferiscono acquisire l’immagine linkando la url del tuo sito che la ospita, salvando ovviamente, anche la banda che invece sciuperai tu. Se vuoi prevenire questo, inserisci questo snippet di codice dentro il tuo file .htaccess e il gioco è fatto!

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?tuosito.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?tuosito.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://i.imgur.com/g7ptdBB.png [NC,R,L]

oppure

RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?tuosito.com/.*$ [NC]
RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

Rimuovere il www dalle url

Se vuoi rimuovere il www nel tuo sito, il seguente codice ti permetterà di farlo.

RewriteEngine On
RewriteCond %{HTTP_HOST} !^tuosito.com$ [NC]
RewriteRule ^(.*)$ http://tuosito.com/$1 [L,R=301]

Evitare la pagina bianca degli errori

Fornire al visitatore una inutile pagina bianca non è una cosa bella, è sempre preferibile creare delle pagine informative relativa all’errore con dei link che possono aiutare nella navigazione.

ErrorDocument 400 /errors/badrequest.html
ErrorDocument 401 /errors/authrequest.html
ErrorDocument 403 /errors/forbidden.html
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/servererror.html

Aumentare la velocità del sito  con un miglior caching 

Assicurati che non ci siano altri script di codici relativi al caching, eventualmente utilizza questo per decidere il tempo di caching dei file che nell’esempio ho impostato a 48 ore.

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
Header set Cache-Control "max-age=57600"
</FilesMatch>

Disattivare  il caching per alcuni tipi di files

# disabilita la cache per script e file dinamici
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>

Comprimere i file

# comprimi text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

Reindirizzare tutti i feed su Feedburner.com

RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC]
RewriteRule ^feed/?.*$ http://feeds.feedburner.com/feed_uri [R=301,NC,L]

Evitare l’accesso ai backup del tuo sito

Se vuoi evitare che qualcuno acceda ai tuoi file di backup o ai sorgenti che hai inserito nel tuo account FTP, ti basterà inserire questo codice all’interno del tuo file .htaccess.

<FilesMatch "(\.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|swp)|~)$">
## Apache 2.2
Order allow,deny
Deny from all
Satisfy All
## Apache 2.4
# Require all denied
</FilesMatch>

Proteggere una directory con un password con .htaccess

Per evitare l’accesso a determinate aree del tuo ftp come le directory, le immagini ed altre tipologie di file dovrai creare tue tipologie di file: il file .htaccess con il codice e il file .htpasswd con l’username e la password necessari per permettere l’accesso ai soli utenti consentiti.

Entra nella cartella che vuoi proteggere ed inserisci questo codice nel file .htaccess:

AuthType Basic
AuthName "Area protetta da password"
AuthUserFile /utente/antonio/htdocs/nomecartella/.htpasswd
Require valid-user
  •  In pratica con la direttiva Authtype indichiamo la tipologia che ci interessa, ovvero basica.
  • Con il valore AuthName indichiamo il nome che avrà la pagina che verrà visualizzata.
  • Con AuthUserFile specifichiamo il percorso del file .htpasswd (deve essere assoluto)
  • Require specifica quali utenti o gruppi di utenti possono accedere ai contenuti protetti, nell’esempio ho impostato valid-user che significa ogni utente che abbiamo creato nel file .htpasswd.

file .htpasswd

Questo file dovrai inserirlo nella posizione che hai specificato nel file .htaccess. All’interno devi inserire l’utente e la password per ogni utente che vuoi far accedere all’area protetta.

utente1:password_cifrata
utente2:password_cifrata

In alternativa puoi utilizzare il tool htpasswd generator di mrwebmaster

Reindirizzamento del sito verso https (ssl)

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Redirect da non www a www

RewriteEngine On
RewriteCond %{HTTP_HOST} ^tuosito.com\.net$
RewriteRule (.*) http://www.tuosito.com/$1 [R=301,L]
Approfondimento: Come impostare la versione preferita del dominio tra www e non www

Preventivare il listing di una directory

Options -Indexes

Specificare il limite upload dei file per PHP in htaccess

php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200

Implementare la cache con il file .htaccess

# year
<filesmatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$"="">
Header set Cache-Control "public"
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
Header unset Last-Modified
</filesmatch>
#2 hours
<filesmatch "\.(html|htm|xml|txt|xsl)$"="">
Header set Cache-Control "max-age=7200, must-revalidate"
</filesmatch>
<filesmatch "\.(js|css)$"="">
SetOutputFilter DEFLATE
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
</filesmatch>

Bloccare le richieste basate su User-Agent Header

SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT

Forzare UTF-8

Usa questo codice per far decodificare la tua pagina in utf-8

AddDefaultCharset utf-8

Cambiare la pagina di default Index

DirectoryIndex prova.html

Bloccare l’accesso al file .htaccess

# rendi sicuro il tuo  htaccess file
<Files .htaccess>
order allow,deny
deny from all
</Files>
# evitare il viewing di uno specifico file
<Files secretfile.jpg>
order allow,deny
deny from all
</Files>
# tipi di files multipli
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>

Bloccare l’accesso da determinati siti +

# block visitors referred from indicated domains
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} sitodabannare.com [NC,OR]
RewriteCond %{HTTP_REFERER} sitodaescludere.com [NC,OR]
RewriteRule .* - [F]
</ifModule>

 Bloccare  determinati Ip sul proprio sito

Bloccare accessi da uno specifico indirizzo ip:

Deny from indirizzo_IP

bloccare tutti gli indirizzi IP con la stessa identificazione:

Deny from .sitodaescludere.uk

bloccare l’accesso da un intero range di ip inclusi nella rete:

Deny from 192.168

Disabilitare l’esecuzione di script per aumentare la sicurezza delle cartelle

# secure directory by disabling script execution
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI

Configuratore di  file .htaccess online: http://www.htaccesseditor.com/

Risorse Utili (in inglese)

Se ti è piaciuta la mia guida al file .htaccess, mi aiuteresti a condividerla sui social network? Grazie, e alla prossima!

Guida .htaccess: Trucchi utili per Htaccess
4.8 (96%) 5 votes

  • Complimenti! L’ho aggiunta tra i preferiti questa guida ricca di Snippet utili, sai tra colleghi quante volte si cerca su Google questi Snippet che non si ricordano mai… Qui sono tutti raggruppati, ottimo 🙂

    • Ciao Marco e benvenuto. Sono felice che hai trovato utile questa pagina. Se vuoi ricevere contenuti di qualità nella tua mail, registrati alla mia newsletter.