Come fare redirect 301 con Silverstripe (CMS OpenSource SEOFriendly)

Ogni giorno mi imbatto in nuovi CMS (Content Management System), ogniuno con le proprie caratteristiche, peculiarità e difetti.

Redirect 301 con SilverStripe

Attualmente, mi capita spesso di lavorare su SilverStripe, un CSM OpenSource con un’ottima community di sviluppatori. Proprio per questo, anche se abbastanza giovane, SilverStripe è un buon CSM anche perchè ha già le principali funzioni SEO-Friendly native.

Vista questa predisposizione però, in caso di restyling dove è fondamentale – per recuperare traffico e backlinks – realizzare redirect 301 puntuali da pagine vecchie a pagine nuove è necessario usare particolari impostazioni di mod_rewrite per eseguire appunto i reindirizzamenti tramite il file htaccess.

Redirect 301 con SilverStripe

La riscrittura delle url di SiverStripe viene eseguita appunto tramite il file .htaccess presente nella ROOT del sito, in particolare le stringhe coinvolte sono queste:

RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L]

[php]
### SILVERSTRIPE START ###
<Files *.ss>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Files>

<Files web.config>
Order deny,allow
Deny from all
</Files>

ErrorDocument 404 /assets/error-404.html
ErrorDocument 500 /assets/error-500.html

<IfModule mod_alias.c>
RedirectMatch 403 /silverstripe-cache(/|$)
</IfModule>

<IfModule mod_rewrite.c>
SetEnv HTTP_MOD_REWRITE On
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L]
</IfModule>
### SILVERSTRIPE END ###
[/php]

Questo è il codice standard di SilverStripe per la riscrittura delle URL. Ma se aggiungi il classico comando di 301 all’htaccess appunto per effettuare il “redirect 301” da una url vecchia a una nuova il reindirizzamento non funzionerà perchè all’url nuova verrà aggiunta la {QUERY_STRING} come da comando presente nell’.htaccess.

Per ovviare a questo problema occorre quindi riscrivere le url vecchie in quelle nuove usando poi il 301 come impostazione del “RewriteRule”.

Vediamo con un esempio:

URL Vecchia = http://www.sitodiesempio.it/vecchia-directory/vecchia-pagina.asp

URL Nuova = http://www.sitodiesempio.it/nuova-directory/nuova-pagina/

Basta inserire la regola di rewrite prima della condizione e riscrittura generica di SilverStripe (riga 24):

RewriteRule ^vecchia-directory/vecchia-pagina.asp /nuova-directory/nuova-pagina/ [R=301,NC,L]

Così da ottenere il nuovo codice comprensivo del nostro bel redirect 301 (ho aggiunto anche due commenti di inizio e fine dell’area di redirect):

[php]
### SILVERSTRIPE START ###
<Files *.ss>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Files>

<Files web.config>
Order deny,allow
Deny from all
</Files>

ErrorDocument 404 /assets/error-404.html
ErrorDocument 500 /assets/error-500.html

<IfModule mod_alias.c>
RedirectMatch 403 /silverstripe-cache(/|$)
</IfModule>

<IfModule mod_rewrite.c>
SetEnv HTTP_MOD_REWRITE On
RewriteEngine On
RewriteBase /

### Inizio: Redirect 301 by Prima Posizione Srl ###
RewriteRule ^vecchia-directory/vecchia-pagina.asp /nuova-directory/nuova-pagina/ [R=301,NC,L]
### Fine: Redirect 301 by Prima Posizione Srl ###

RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L]
</IfModule>
### SILVERSTRIPE END ###
[/php]

Grazie a questa piccola accortezza potrai creare tutti i redirect 301 dalle vecchie pagine del sito a quelle nuove dopo il restyling.

Buon lavoro,
un abbraccio.
Michele
 

Scritto da    |   aprile 23rd, 2012   |   Nessun commento
Michele De Capitani

Lascia un commento