Scritto da davidonzo il 30/05/2007, in OpenSource
ATTENZIONE!
L'articolo che stai leggendo è stato scritto 539 giorni orsono.
Le informazioni presenti potrebbero non essere aggiornate!
L'articolo che stai leggendo è stato scritto 539 giorni orsono.
Le informazioni presenti potrebbero non essere aggiornate!
Molti hanno letto che sto lavorando ad una nuova piattaforma di blogging. Il mio intento (tempo permettendo) è quello di ritrovarmi con qualcosa che risponda scrupolosamente alle mie esigenze.Potendo sfruttare Apache sul nuovo server che (spero entro 3 mesi) ospiterà il blog, una delle cose che ho subito fatto è impostare un permalink che eliminasse qualsiasi tipo di query string.
Mi si pongono però due questioni:
- Come impostare il nuovo permalink?
- Come non perdere l'indicizzazione dei motiri di ricerca?
Cominciamo con il risolvere la questione più importante: voglio che nessuno possa vedersi rispondere da un errore 404 se mi ha trovato da un vecchio permalink. Per farlo, basta impostare un redirect permanent nel file .htaccess in modo tale che la ridirezione avvenga al giusto post!
In parole povere chi chiede la pagina: dblog/articolo.asp?articolo=ID dovrà essere ridirezionato su index.php?post=ID.
Basta una riga di .htaccess :)
RedirectMatch 301 dblog/articolo.asp?articolo=(.*) /index.php?p=$1
In questo modo chiunque chieda una pagina del vecchio blog sarà reindirizzato alla query string del nuovo blog in automatico.
Con la notazione 301 (che avrei potuto sostituire con la parola "permanent") informo i motori di ricerca che il cambiamento è permanente e li invito ad aggiornare i loro archivi.
Friendly Permalink
In un sistema di blogging in cui tutto gira sull'ID degli articoli (chiave primaria ovviamente, quindi unico elemento irripetibile in due o più post), la query che si occupa di selezionare l'articolo nella relativa tabella usa proprio questo parametro come discriminante.
Vista anche la struttura del vecchio permalink la tentazione di strutturarlo in questo modo:
http://www.davidonzo.com/p/ID
E' stata grande. Ma perchè non inserire anche il title nel permalink? Il risultato è una maggiore reperibilità di informazioni da parte dei motori di ricerca. Nonchè una maggiore leggibilità umana dell'argomento del link (forse sono il solo, ma leggo sempre il link nella pagina risultati del motore di ricerca).
Mi sono deciso! Anche il title deve far parte del permalink! Come lo strutturo per far si di non creare nuovi campi nella tabella dei post ed evitando di modificare la query più importante dell'applicazione? Facile :) Uso la stessa funzione che si occupa di estrapolare il titolo del post, sostituisco i caratteri non alfanumerici con dei trattini ed il permalink è bello che fatto!
Andiamo con calma:
- Ipotizziamo che il titolo del post sia la variabile $title. Per ripulire il title dagli spazi e da altri caratteri che è meglio non compongano un'URL pasterà fare la seguente:
$title = preg_replace('#[^a-zA-Z0-9]#', '-', $title);
Se nel titolo è compreso un carattere non alfanumerico sostituisco il matching con un trattino. Perchè proprio il trattino? Perchè nelle URL questo è letto dai motori di ricerca come uno spazio, quindi sarà indicizzato per quello che è come frase e non come singola parola. Eventualità che si sarebbe verificata se invece del trattivo avessi usato l'underscore (il trattino basso).
Provate un po' a cercare su google "Tutto_Gratis", "Tutto-Gratis" e "Tutto Gratis". La seconda e la terza ricerca avranno risultati identici, la prima differirà di molto :)
Alla fine il permalink sarà un qualcosa del genere.
http://www.davidonzo.com/p/ID/Titolo-Del-Post/
Ma mi si pone un altro problema! Come regolarmi con il redirect permanent sopra impostato?
La soluzione più logica mi è sembrata prevedere per i primi tempi una convivenza fra permalink, impostando un redirect coerente con il nuovo formato.
RewriteRule ^p/([^/.]+)/(.*)/?$ index.php?p=$1 [L]
RewriteRule ^p/([^/.]+)/?$ index.php?p=$1 [L]
#Ridireziono nel giusto modo anche il vecchio permalink
RedirectMatch 301 dblog/articolo.asp?articolo=(.*) /p/$1
RewriteRule ^p/([^/.]+)/?$ index.php?p=$1 [L]
#Ridireziono nel giusto modo anche il vecchio permalink
RedirectMatch 301 dblog/articolo.asp?articolo=(.*) /p/$1
Critiche, suggerimenti o fanculizzazioni?
Sono sempre gradite...




..




