Author Avatar

Fabrizio S.

0

Share post:

La regola del Web Server Apache

RewriteRule SEO

Vediamo in questa guida di comprendere al meglio uno dei tanti moduli presenti nel vostro server web Apache , ai fini SEO ,   ossia mod_rewrite. Si tratta di un programma che rende ha come scopo quello di prendere una richiesta di un client (Voi) e editarla, modificarla secondo le direttive che trova scritte in un file chiamato .htaccess.  Qui trovate il manuale di riferimento del Server Apache , al momento in cui stiamo scrivendo questa guida siamo arrivati alla versione 2.4. Primo passo che occorre fare è verificare se il modulo è stato pre caricato con questo , altrimenti rivolgetevi al proprietario della vostra soluzione hosting e richiedete che lo sia in ogni modo mettete queste righe come primo codice nel vostro htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
OPtions +FollowSymlinks
RewriteBase /
</IfModule>

RewriteEngine On attivia la modalità di riscruttura
Options +FollowSymlinks comunica ad Apache di eseguire i link simobolici, praticamente serve per fare funzionare Apache distribuzione Linux anche su un server Windows in modo corretto. Facciamo un discorso di preambolo . Siccome siete venuti in questo sito  volete riscrivere un Url Friendly.

Cosa è un Url SEO Friendly?

Qui dobbiamo andare a considerare quelle piccole informazioni che i padroni di google per bocca di Matt Cutts si degnano di farci sapere di volta in volta. Per esempio prendiamo un CMS come Worpdess, da un pò di tempo c’e’ la possibilità di cambiare i permanilink ossia i link dei vostri articoli prima fino a un 5 anni fa un tipico link di wordpress era dato da

http://www.miosito.ext/?p=1234

mentre con i permalink un tipico link è dato da

http://www.miosito.ext/pluto-abbaia/

ovviamente il secondo link è portatore di molta più informazione da parte di google e quindi viene definito SEO Friendly. Ma andiamo veramente per passi supponiamo di volere mappare  index.php in index.html ossia ipotizziamo che l’utente carichi la  pagina index.php ma le informazioni le riceva dalla pagina html.

Carico pagina index.php e ricevo le informazioni da index.html

RewriteRule ^index.php$ index.htm

Per essere più specifici la riga sopra dice al server web Apache che qualora l’utente carichi nel nostro server una pagina che termini con index.poh, allora le informazioni da caricare le trovi sulla pagina index.html

Veniamo a qualcosa di più specifico ossia

SEO ULR Friendly con htaccess

Supponiamo che il nostro indirizzo reale sia index.php?p=news

e che vogliamo rimappare il tutto in qualcosa di molto più amichevole del tipo
/news/

In questo caso dovremo inserire nel nostro htaccess la seguente riga di codice

RewriteRule ^index.php/(.*)\.htm$ index.php?sezione=$1

Dove

Rewriterule è la parola chiave

  • ^index.php/ trasforma in index.php e quindi praticamente non fanulla
  • / crea di fatto una directory virtuale
  • (.*) questo lo dividiamo in tre parti.
    . qualsiasi carattero
    * ripetuto un numero infinito di volte
    ( ) trasformalo in variabile
    .html assegnagli estensione html
    $ termina prima parte della riscrittura
  • $1 è il back reference ed ha il compito di cattura del valore della variabile che nel nostro caso è news e sostituirà il valore di (.*)
  • Vediamo un altro esempio sulla stessa riga di quello sopra. Consideriamo che vogliamo fare all’utente  il login in questo modo
  • http://www.sito.it/corso/123

invece che

http://www.sito/corso.php?id=123

in queto caso la procedura da seguire è la seguente

RewriteRule ^corso\/(.*)$ corso.php?id=$1

questo codice è formalmente corretto ma non lo è del tutto, in quanto come abbiamo progettato il tutto in id il server si aspetta un codice numerico ma se si trova un codicealfanumerico allora viene generato un codice, che è un parametro del progetto dentro il file php, ma molte generazioni di error potrebbero portare il web server a rallentare , consideriamo quindi  il seguente codice

RewriteRule ^corso\/([0-9]{1,10})$  corso.php?id=$1

Dove potete notare che  abbiamo sostituito

([0-9]{1-10]) con (.*)

che indica di accettare al server solamente numeri compresi fra  0 e 9

nel caso avessimo due parametri da passare come variabile dovremmo fare

RewriteRule ^corso/(.*)/(.*).htm$ strumenti/corso.php?id=$1&id=$2

Il funzionamento è di fatto analogo a quello sopra descritto.

Anche se non lo abbiamo detto esplicitamente in questo capitolo introduttivo vi abbiamo parlato delle espressioni regolari.

Le espressioni regolari RegEx

Le espressioni regolari sono uno strumento molto potente che ci permette di codificare un testo tramite dei caratteri speciali che il metalinguaggio riconosce , in questo caso a riconescerli è ovviamente il web server Apache. Vediamone qualcuno.

Identificatori di Testo

Le parentesi quadre indicano una classe che può raggruppare un numero indistinto di valori es [ABc] vuol dire che può rappresentare  A o B o c ma non C oppure [a-c] indica un elemento dell’alfabeto fra a e c ossia o a oppure b oppure c  queste classe si possono anche unire a formare classi più grandi come [a-zA-Z] che segnifica  che può essere un elemento fra a e z oppure un elemento fra A e Z oppure [0-9] un elemento compreso fra 0 e 9

Il simbolo . (punto) indica qualsiasi carattere

Il simbolo ^ indica che la parola che segue non deve avere nulla prima ossia prima abbiamo scritto ^index  questo significa che accetta index ma non editindex e cosi’ via.

il simbolo $ indica la fine  di una parola quindi index$ legge  index o editindex ma non index.php

Il simbolo \s: indica lo spazio.

Quantificatori

  • ? 0 o 1 occorrenze dell’identificatore di testo precedente
  • * 0 o N occorrenze dell’identificatore di testo precedente (N>0)
  • + 1 o N occorrenze dell’identificatore di testo precedente (N>1)

 

Escape:
\ esegue l’escape del carattere che segue

Negazione:
è possibile eseguire la “negazione” di un determinato pattern facendolo precedere dal carattere punto esclamativo !

il codice {m,M} permette invece di indicare con precisione il numero minimo (m) e massimo (M) di ripetizioni. Se scriviamo [a-z]{3,10} vogliamo solo parole composte da lettere alfabetiche minuscole di lunghezza compresa tra 3 e 10 caratteri

Configurare il modulo RewriteRule

Finora abbiamo parlato del modulo  RewriteRule , vediamo come attivarlo, in primis occore andare sul file di configurazione di apache e decommentare nel file http.conf al fine di ottenere un miglioramento SEO

LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c

a questo punto scriviamo questo semplice codice che da tutte le informazioni sul php installato e i relativi moduli

<?php
phpinfo();
?>

Se il modulo mod_rewrite risulta presente è la conferma che cercavamo, ossia che è attivo.

La riscrittura condizionata RewriteCond

E’ fondalmentalmente quello che dice di essere ossia ricrive  condizionatamente ad una condizione riscrive se.

Il suo codice è il seguente

RewriteCond espressione1
RewriteRule1
RewriteRule2
RewriteRule…
RewriteRuleN [L]

Da cui si capisce ancora meglio che viene attivata la RewriteRule1….RewriteRuleN solo nel caso che l’espressionne 1 risulti essere vera.

il suo codice è

RewriteCond StringaDaTestare Pattern

In questi casi i parametri di utilizzo sono veramente molti alla versione 2.2 riporta i seguenti

HTTP headers:    connection & request:
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_PORT
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
server internals:
date and time:    specials:
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ
HTTPS

come potete vedere , ma ormai siete esperti e quindi vi potete destreggiare noi ci limitiamo qui ai casi che sono i più comuni.

#Riscrive con status 301 le request url del tipo mysite.com/* in www.mysite.com/*
RewriteCond %{HTTP_HOST} ^miosito\.com
RewriteRule ^(.*)$ http://www.miosito.com/$1 [R=301,L]

# questa regola serve per tagliare le pagine che hanno solamente come parametro id all’interno
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^/web(.+)$ /web/? [R=301,L]

mentre nel caso di regolazione temporale

# questa regola serve per redirigere le richieste HTTP a seconda dell’ora
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0900
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1500

I Flag del Rewritemodule

Scrivendo questa guida spesso e volentieri avete visto che ci sono dei flag [R,NC] etc. etc. vediamo che cosa sono

  • [R] manda la url invocata ad un indirizzo esterno al nostro dominio inviando un response code 302 che indica mossa temporaneamente che tradotto in termini di google SEO significa che non viene passato Page Rank da parte del motore di ricerca Google
  • [F] impedisce di accedere  alla url invocata e restituisce codice 403 accesso non consentito.
  • [G] significa che la url non è più presente nel server che gli avete indicato, il codice di risposta del server è 410
  • [L] indica al server di non seguire altre direttive seguenti nel caso le trovasse.
  • [P] passa il controllo al modulo mod_proxy.
  • [QSA]Quando la sostituzione URI contiene una stringa di query, il comportamento predefinito di RewriteRule è quella di scartare la stringa di query esistente e sostituirlo con la nuova generata . Utilizzando il flag [QSA] fa sì che le stringhe di query da combinare.Si consideri la seguente regola:RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
    Con il [QSA]  Flag una richiesta di  /pages/123?one=two sarà mappato /page.php?page=123&one=two. . Senza la bandiera [QSA], che la stessa richiesta sarà mappato / page.php page = 123? – cioè, la stringa di query esistente verrà eliminata.

Trucchi SEO

Vi insegniamo adesso che siete abbastanza pratici dei trucchetti SEO per rendere più appetibile il vostro sito a Google.

Vediamo come impedire che venga  scaricato dei download

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

con queste regole skipperete il www del file

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

Per creare delle pagine di errore personalizzate possiamo fare

ErrorDocument 401 /error/Errore401.php
ErrorDocument 403 /error/Errore403.php
ErrorDocument 404 /error/Errore404.php
ErrorDocument 500 /error/Errore500.php

Vediamo adesso qualche istruzione per velocizzare il vostro sito web.

Iniziamo a dettare le regole al server per compimere i file

# comprimere testo, 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

e per fare il caching dei file potremmo fare

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

Occupiamoci adesso del settore sicurezza per evitare gli attacchi degli hacker

Blocchiamo l’accesso al file htaccess

<Files .htaccess>
order allow,deny
deny from all
</Files>

<Files secretfile.jpg>
order allow,deny
deny from all
</Files>

<FilesMatch “.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$”>
Order Allow,Deny
Deny from all
</FilesMatch>

Vediamo come sia possibile disabilitare la visulaizzazione di alcune specifiche cartelle

# disabilita la visualizzazione della cartella
Options All -cartella1

# abilita la visualizzazione della cartella
Options All +cartella1

vediamo adesso come sia possiible bloccare alcuni domini

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} dominio1.com [NC,OR]
RewriteCond %{HTTP_REFERER} dominio2.com [NC,OR]
RewriteRule .* – [F]

</ifModule>

E per bloccare uno specifico user agent si fa

# blocca i visitatori indicati
<IfModule mod_rewrite.c>
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
</ifModule>

 

 

Per altri approfondimenti SEO su come utilizzare Apache

Collegare Wordpress multi autore rel author e publisher a Google Plus
Per una buona indicizzazione SEO passi principali