Impostare regole redirect nel htaccess

redirect 301 htaccess

File htaccess: Cos’è e quando Utilizzarlo

Il file htaccess viene utilizzato per modificare le impostazioni di un determinato percorso.

All’interno del file .htaccess (Hypertext Access) possono essere utilizzati vari metodi per reindirizzare le pagine e può essere usato solo con server compatibili, come per esempio server Apache.

Redirect 301

Il metodo più semplice è il Redirect 301, il quale sfrutta il mod_alias, ovvero  un modulo a cui fanno riferimento delle direttive che consentono di definire delle alternative nella digitazione delle URL, questo tipo di redirect non permette di utilizzare le espressioni regolari.

Redirect Match

Altro metodo è il redirect match che sfrutta anch’esso il mod_alias ma permette di utilizzare le espressioni regolari.

Se vuoi vedere degli esempi, ti consiglio di dare un occhiata alle prime due regole definite nella sezione: redirect 301

Siccome i redirect sono un fattore molto importate per l’indicizzazione e il posizionamento di un sito, ti consiglio di affidarti ad un Consulente SEO esperto, che ti illustrerà, se occorre, il modo ottimale per impostarli.

mod_rewrite

Se vogliamo utilizzare l’htaccess per effettuare redirect più complessi utilizziamo il mod_rewrite

Prima di tutto dobbiamo attivare il rewrite mediante la direttiva RewriteEngine On

RewriteEngine On

RewriteBase /

RewriteRule ^index[0-9].html$ http://sito.it/b.html [R=301,NC]

  • I simboli ^ e $ indicano rispettivamente l’inizio e la fine dell’url.
  • [0-9] indica un numero compreso tra 0 e 9

Quindi, in questo caso tutte le url che hanno una url foramata da index seguito da un numero (es: sito.it/index5.html) viene effettuato il redirect.

Alla fine della regole abbiamo racchiuso alcuni parametri tra parentesi quadre.

Ecco a cosa servono:

    • [R=301] –> indica il redirect 301
    • NC –> indica che l’url può essere case insensitive, quindi anche se scrivo IndEX.html l’url verrà reindirizzata
  • L –> indica che dopo questa riscrittura non deve essere eseguita nessun altra riscrittura

RewriteEngine On

RewriteBase /

RewriteRule ^index([0-9]).html$ http://sito.it/b$1.html [R=301,NC]

Parliamo del Paramento [QSA]

Il flag QSA aggiunge una stringa di query esistente dopo che l’URI è stato riscritto.
Esempio regola senza il parametro QSA:
URL= https://sito.com/foo/bar?q=gennaro
Regola: RewriteRule ^foo/(.*)$ /index.php?b=$1
Risultato: /index.php?b=bar
Quindi la stringa esistente viene eliminata a favore di quella presente nella regola (b=$1)
Ora se includiamo il Parametro QSA
URL= https://sito.com/foo/bar?q=gennaro
Regola: RewriteRule ^foo/(.*)$ /index.php?b=$1 [QSA]
Il risultato diventa: /index.php?b=bar&q=gennaro

Alcune Regole

Se volessimo reindirizzare la pagina riportando anche il valore numerico, ci basterà inserire tra () la regola nella parte destra dell’url e inserire $1 nella parte sinista.

In questo modo in $1 verrà inserito un valore compreso tra 0 e 9.

Esempio:

sito.it/index3.html reindirizzato sito.it/b3.html


Secondo te a cosa reindirizzerà questa regole?

RewriteEngine On

RewriteBase /

RewriteRule ^pagina/([a-zA-Z]+)/a([0-9]).html$ http://sito.it/seo/b$1/b$2.html [R=301,NC]


Molto spesso capita di trovare la seguente regola:

RewriteEngine On

RewriteBase /

RewriteRule ^(.*)\.html$ http://sito.it/$1.php [R=301,NC]

    • (.*) indica che vado a prendere tutto il contenuto dell’url
  • \. Con questa notazione severe per impostare il carattere di escape. In fondo alla pagina viene indicato cos’è il carattere di escape

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} ^posizionamentomdr.it$

RewriteRule ^(.*)\.html$ http:// posizionamentomdr.it/$1.php [R=301,NC]

Prima di eseguire una rewrite url si possono inserire delle condizioni “RewriteCond“, e se verificate viene eseguita la RewriteRule, in questo caso dico: se l’host è posizionamentomdr.it esegui la regola inserita nel RewriteRule.

Se inseriamo più RewriteCond, la RewriteRule  verrà eseguita solo se tutte le condizioni sono verificate.

Se invece vogliamo che la RewriteRule venga eseguita anche se soltanto una condizione è verificata basta utilizzare l’operatore OR

RewriteCond %{HTTP_HOST} ^posizionamento.it$ [OR]

RewriteCond %{HTTP_HOST} ^posizionamentomdr.it$ [OR]

RewriteCond %{HTTP_HOST} ^posizionamentomotoridiricerca.it$


Precedentemente abbiamo parlato di carattere di escape

I caratteri speciali nel file .htaccess

Alcuni caratteri non vengono letti come caratteri letterali nelle espressioni regolari, ma come un operatore.

Di seguito vengono indicati alcuni caratteri speciali.

    • .
    • +
    • ?
    • \
    • *
    • ^
    • |
    • (“, “)
    • [
  • ]

Se si utilizzano tali caratteri nell’espressione regolare, è necessario utilizzare un escape facendo precedere al carattere un simbolo “\”.

Ad esempio, se è necessario utilizzare le parentesi nel testo di un’etichetta, si può utilizzare questa proprietà di testo.

Casistiche Particolari da Gestire

Alcune volte potrebbe capitarti di trovarti di fronte ad URL con doppio o Triplo slash.

Se vuoi approfondire come risolvere questo problema potresti consultare questa risorsa: https://htaccessbook.com/remove-double-forward-slashes/

Consulente SEO