.Htaccess per tutti

Perché c'è quel punto e cosa significa htaccess?

È l’abbreviazione di “hypertext access”, il punto all'inizio serve a nasconderlo in una cartella in modo che non venga mostrato, a meno che non sia stata abilitata l’opzione per mostrare i file nascosti. Il file .htaccess, è un file di configurazione del server Apache che caricato nella directory root del tuo sito può dare comandi al tuo server. Va ricordato che questo file può rallentare le richieste inviate al serevr e và creato solo se siete su un hosting condiviso in quanto non si ha l'accesso al conf del web-server.

 

A cosa serve e perchè configurarlo?

Può essere utilizzato per la SEO, Sicurezza e Ottimizzazione

Ogni installazione di WordPress viene fornito già con un file codeconfigurato. Può essere utilizzato per i redirect in caso di SEO, disabilitare il caricamento di file sul server e altri tricks per la Sicurezza, utilizzarlo per cache e minificazione in caso di Ottimizzazione. 

 

Vi ricordo che il file .htaccess non serve solo per WordPress ma può essere usato su qualsiasi piattaforma in quanto sono delle direttive per il server.

 

Passiamo subito ai fatti

SEO!

Alcuni esperti SEO dicono che uno slash alla fine del link aiuti, mentre altri dicono che non lo fa. In caso vogliate provare potete usare questo snippet-codes.

<IfModulemod_rewrite.c>
RewriteCond %{REQUEST_URI} /+[^.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>  


Sebbene WordPress sia dotato di pagine di errore codedefinite, puoi anche creare pagine di errore personalizzate e servirle agli utenti tramite il tuo file .htaccess, è possibile utilizzare la stessa pagina di errore per ogni codice di stato di errore o crearne uno per ciascuno, separatamente.

ErrorDocument 404 /error404.html
ErrorDocument 403 /error403.html
ErrorDocument 500 /error500.html
ErrorDocument 501 /error501.html

I reindirizzamenti 301 sono reindirizzamenti permanenti con i quali puoi inoltrare i tuoi visitatori da un URL all'altro.

Redirect 301 /oldurl1 /newUrl1
Redirect 301 /oldUrl2 /newUrl2

In caso di passaggio ad Https dell'intera piattaforma utilizzare questo snippet-codes:

<IfModule mod_rewrite.c> RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://miosito.it/$1 [R=301,L] </IfModule>


Successivamente aggiungere nel file wp-config la seguente stringa:

define(‘FORCE_SSL_ADMIN’, true)

Sicurezza!

Puoi disabilitare la funzione di navigazione delle directory.

Options -Indexes

 

Proteggi il file .htaccess

#BEIGN protect .htaccess

<Files ~ "^.*.([Hh][Tt][Aa])">
Order allow,deny
Deny from all
Satisfy all
</Files>
#END PROTECT

 

Bloccare gli Ip, utile se avete un Ip assegnato o sapete che c'è qualche Ip che vi crea fastidio.


Order allow,deny
Deny from xxx.xxx.xx.xx
Deny from yyy.yyy.yy.yy
Allow from all

 

Mantenere i log degli errori e i file di configurazione protetti è una pratica di sicurezza importante perché contengono dati vulnerabili come il nome utente e la password del database.

<FilesMatch "^.(error_log|wp-config.php|php.ini|.[hH][tT][aApP].)$" >
Order deny,allow
Deny from all
< /FilesMatch>

 

La tua cartella wp-content  contiene plug-in, temi, caricamenti di immagini, alcuni backup e altri file importanti. Oltre ai file statici come immagini, CSS e JavaScript, non c'è motivo di dare l'accesso alla directory del contenuto content.

Order deny,allow
Deny from all
<Files ~ ".(xml|css|js|jpe?g|png|gif|pdf|docx|zip|rar)$" >
Allow from all
< /Files>

 

La cartella wp include contiene importanti file del core WordPress, meglio disabilitarne l'accesso.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^ wp-admin / includes / - [F, L]
RewriteRule! ^ Wp-includes / - [S = 3 ]
RewriteRule ^ wp-includes / [^ /] + . php $ - [F, L]
RewriteRule ^ wp-include / js / tinymce / langs /.+ . php - [F, L]
RewriteRule ^ wp-include / theme-compat / - [F, L]
< / IfModule >

 

Proteggi il file wp-config.php, evitando l'accesso al file di configurazione di WordPress.

#BEIGN wp-config.php
<files wp-config.php>
Order deny,allow
Deny from all
</files>
#END wp-config.php

 

Una delle pratiche da effettuare è sicuramente disabilitare l'accesso ai file php del tema o plug-in.

RewriteCond %{REQUEST_URI} !^ /wp-content/ plugins/file/to/exclude.php
RewriteCond %{REQUEST_URI} !^ /wp-content/ plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(..php)$ - [R= 404 ,L]
RewriteCond %{REQUEST_URI} !^ /wp-content/ themes/file/to/exclude.php
RewriteCond %{REQUEST_URI} !^ /wp-content/ themes/directory/to/exclude/
RewriteRule wp-content/themes/(.
.php)$ - [R= 404 ,L]

 

L' XML-RPC consente l'accesso ad app di terze parti come Jetpack sul tuo sito in modo che possano pubblicare contenuti o eseguire azioni diverse su di esso. Questa è un impostazione attiva di base, meglio disabilitare se non necessaria.

<FilesMatch "^(xmlrpc.php)" >
Order deny,allow
Allow from xxx.xxx.xx.xx
Allow from yyy.yyy.yy.yy
Deny from all
< /FilesMatch>

 

Gli hacker spesso codendono di mira le variabili GLOBALS e _REQUEST sui siti WordPress. Le seguenti regole di .htaccess fanno sì che il tuo server neghi queste modifiche.

Options +FollowSymLinks RewriteEngine On RewriteCond %{QUERY_STRING} (|%3C).script.( > |%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

 

WordPress utilizza una struttura URL specifica per le pagine dell'autore che visualizzano tutti gli articoli appartenenti allo stesso autore. Ad esempio, se un utente immette https://www.yoursite.com/?author=1 nella barra degli URL, il browser carica la pagina dell'autore che visualizza tutti i post dell'autore insieme al nome utente. Con la stessa tecnica, è facile scoprire il nome utente di ciascun autore. Tuttavia, puoi impedirlo utilizzando questo snippet-codes nel tuo .htaccess.

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=404]

Se tu e tutti i tuoi amministratori avete un IP statico, potete proteggere la vostra area admin di WordPress aggiungendo le seguenti regole al vostro .htaccess .

AuthUserFile /dev/ null
AuthGroupFile /dev/ null
AuthName "WordPress Admin Access Control"
AuthType Basic
<LIMIT GET>
Order deny,allow
Deny from all
Allow from xxx.xxx.xx.xx
Allow from yyy.yyy.yy.yy
</LIMIT>

Se desideri che i visitatori non abbiano la possibilità di visualizzare o scaricare determinati tipi di file

AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov

Ottimizzazione!

Puoi accelerare il tuo sito abilitando la cache del browser sul tuo server in modo che i browser degli utenti non debbano scaricare continuamente file statici come immagini e script.

#Expires headers (for better cache control)
<IfModule mod_expires.c>
ExpiresActive on
#Perhaps better to whitelist expires rules? Perhaps.
ExpiresDefault "access plus 1 month"
#cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
ExpiresByType text/cache-manifest "access plus 0 seconds"

#Your document html
ExpiresByType text/html "access plus 0 seconds"

#Data
ExpiresByType text/xml "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"

#Feed
ExpiresByType application/rss+xml "access plus 1 hour"
ExpiresByType application/atom+xml "access plus 1 hour"

#Favicon (cannot be renamed)
ExpiresByType image/x-icon "access plus 1 week"

#Media: images, video, audio
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"

#HTC files (css3pie)
ExpiresByType text/x-component "access plus 1 month"

#Webfonts
ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

#CSS and JavaScript
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
</IfModule>



La compressione GZIP è abilitata sul lato server e consente un'ulteriore riduzione delle dimensioni di HTML, CSS e file JavaScript. Non funzionerà sulle immagini in quanto queste sono già comcodesse in un modo diverso.
<IfModule mod_deflate.c>

#Comcodess HTML, CSS, JavaScript, Text, XML and fonts
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml


#Remove browser bugs (only needed for really old browsers)
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent
</IfModule>



Mod_pagespeed è un modulo server open source. Combina file Css, rimuove spazi bianchi e commenti in Html, comcodessione delle immagini. In questo modo si possono ridurre le richieste al server.
#ENABLE MOD PAGESPEED START
<IfModule pagespeed_module>
ModPagespeed on
ModPagespeedEnableFilters rewrite_css,combine_css
ModPagespeedEnableFilters recomcodess_images
ModPagespeedEnableFilters convert_png_to_jpeg,convert_jpeg_to_webp
ModPagespeedEnableFilters collapse_whitespace,remove_comments
</IfModule>
#ENABLE MOD PAGESPEED END



Keep-Alive è una tecnica che consente a una connessione TCP (Transmission Control Protocol) di accedere a più file dal server al browser Web anziché creare una nuova connessione per ogni nuova richiesta (file).

START ENABLE KEEP ALIVE

Header set Connection keep-alive

END ENABLE KEEP ALIVE



L'hotlinking delle immagini si verifica quando un altro sito Web visualizza le tue immagini collegandole al loro URL sul tuo sito. Questo traffico extra aumenta la larghezza di banda e potrebbe rallentare in modo significativo il tuo sito. Puoi facilmente evitare con il seguente snippet-codice.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yoursite1.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yoursite2.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.com [NC]
RewriteRule .(jpg|jpeg|png|gif)$ – [NC,F,L]



Queste 22 best-pratices da eseguire nel tuo .htaccess possono fare la differenza sul tuo sito/blog. Va detto che ci sono plug-in che svolgono queste funzioni, però perché utilizzarle quando con poche righe si può fare tutto e si mantiene la piattaforma più leggera?!