Site icon Noir Solutions

RewriteRule per ottenere URL SEO con htaccess

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

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

 

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

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

Exit mobile version