Sviluppo siti internet con mod_rewrite di Apache (parte 1 – siti monolingua)

Buongiorno a tutti,
scrivo questo articolo per cercare di spiegare in modo semplice, pratico e diretto come sviluppare siti web dinamici ottimizzati per i motori di ricerca, Google su tutti.
Nello specifico mi avvarrà dell’utilizzo del comodissimo mod_rewrite di Apache, l’intero articolo è incentrato particolarmente su di esso.

L’articolo sarà  diviso in 2/3 parti:

  • Sviluppo siti internet “monolingua” con mod_rewrite di Apache
  • Sviluppo siti internet “multilingua” + approfondimenti sistemistici
  • Eventuale terzo articolo con approfondimenti dettati da vostre richieste e suggerimenti

PREMESSA (REGOLE PER UNA VALIDA INDICIZZAZIONE NEI MOTORI DI RICERCA)

  1. Evitare la porcata di mettere parole chiave nascoste (non mi riferisco al solito meta tag) a raffica all’interno delle pagine del sito, se i motori se ne accorgono sono dolori… anzi, cazzi…
  2. Utilizzare per le pagine titoli che siano brevi e rappresentanti il reale contenuto della pagina web
  3. Utilizzare nomi di pagine che non siano: pagina1-int.php o cose simili, se sto realizzando una pagina che visualizza notebook la chiamerà notebook.php o simili
  4. Inserire sempre in tutte le pagine keywords e description, anche se contano sempre meno male non fanno. Se possibile personalizzarle per pagina
  5. Scegliere un nome di dominio possibilmente coerente con il tipo di attività  o prodotto da promuovere
  6. Scrivere codice compatibile con gli standard dettati dal W3C (quelli che tanto per intenderci alla Microsoft non sanno cosa sono…), personalmente consiglio XHTML 1.0 transitional che non stressa più di tanto ed è efficace (sono benvenuti suggetimenti differenti)
  7. Evitare sgami strani del tipo, quando passa Google gli faccio vedere qualcosa d’altro, se si accorgono che cià che il motore indicizza non è lo stesso di quello che visualizzerebbe un utente normale si incazzano e fanno bene
  8. Utilizzare tag come h1, h2 facilita il bot nel comprendere che quel testo è un titolo o un sottotitolo, per il corpo utilizzare ad esempio il tag html p

UTILIZZO DI MOD_REWRITE PER OTTENERE URL “PIACEVOLI” PER I MOTORI DI RICERCA

Veniamo ora al reale motivo per cui scrivo questo articolo.
Realizzare un sito dinamico è indubbiamente una cosa eccezionale per un cliente e per chi lo realizza, poter utilizzare un’unica pagina product.php?id=x è molto meglio di avere 800.000 pagine per ogni maledetto prodotto, idem per le news etc…
Purtroppo perà questi URL cosiddetti dinamici sono poco graditi ai motori di ricerca, Google su tutti, sia perchè la pagina esprime solo il concetto che tratta un prodotto, sia perchè proprio questo ?id=x non è amato da Google. Non parliamo poi di cose come ?id?x&a=2&b=y …

A salvarci da questo annoso problema viene incontro mod_rewrite di Apache.
In pratica è possibile far puntare le nostre pagine a qualcosa di questo tipo: http://www.miosito.com/product/albero_motore_nave-10.html

Chiaramente questa risorsa non esiste sul nostro web server indiano preferito ma dovremo fare in modo che quando il browser dell’utente punta all’indirizzo sopra citato la pagina chiamata internamente da Apache sia qualcosa tipo: product.php?id=x (il tutto trasparentemente per Google e per l’utente).

Per fare cià usiamo mod_rewrite e le direttive da lui fornite. Vediamo un esempio di direttiva che soddisfi il nostro caso:

RewriteEngine On
RewriteRule ^product/([^/]+).html product.php?id=$1 [L]

In sostanza con RewriteEngine On si dice al motore di avviarsi, con la seconda direttiva si comunica ad Apache che per la risorsa /product deve prendere come variabile tutto cià che precede .html e utilizzarla come variabile $1 che poi verrà  comodamente passata in GET alla pagina PHP.

Chiaramente nello script dovremo parsare $_GET[‘id’] e “prelevare” il valore reale che ci interessa di quanto in input, ovvero 10.
E’ assolutamente possibile far fare questo parsing già  ad Apache ma siccome non mi ricordo a memoria come si fa e sono le 3 di notte mi scuso e se lo scoprite segnalatemelo… 😀

E’ probabile che in realtà  il prodotto sia memorizzato nel DB con il nome di “Albero motore nave”, ovviamente prima di passarlo in GET è il caso di ripulirlo dei caratteri non prettamente alfanumerici e renderlo strtolower.

E’ assolutamente essenziale anche che tutto quanto presente e referenziato in product.php abbia come riferimento o il path assoluto alla risorsa o alla root del sito.

A seguire tra qualche giorno le restanti parti dell’articolo.

Tanti saluti e buon rewrite a tutti.
Max – info [AT] massimo-caselli [DOT] com

Share

Fastidioso bug in php_openbase_dir di PHP

A seguito dell’ormai noto Capodanno in extreme administration io e il prode sistemista con il cappellino, Alessandro N. ci siamo imbattuti in un fastidioso bug di PHP attualmente non corretto, i dettagli del bug li trovate qui.

Infatti pur avendo sistemato correttamente tutti i permessi molte applicazioni web che necessitavano di upload di immagini e file vari hanno misteriosamente smesso di funzionare.
La causa era dovuta al fatto che sul server temporaneo abbiamo messo un link simbolico che punta /home verso una directory dove abbiamo recuperato tutti i dati del server defunto.

In pratica la funzione openbase_dir di PHP non gestisce correttamente i link simbolici e negava accesso corretto agli script PHP.
La soluzione è stata quella di copiare tutto in /home e stop… 😀

Arrivederci alla prossima, e speriamo che questo 2006 la pianti di essere come la fine del 2005 altrimenti vado a fare il ragazzo di campagna nelle steppe russe… 😉

Ciao. Maxgrante

Share

Capodanno in extreme administration

Ciao a tutti,
con piacere vi racconto la favola della brutta storia finita bene… come voi tutti sapete se c’è uno che ha ragione quello è Murphy!
Infatti è da circa due anni che la mia società  ha messo i server in co-location presso Colt a Milano ed è due anni che non succedeva nulla…
L’altro giorno penso tra me e me, certo che la co-location è proprio una gran cosa, mai un down di linea, di corrente, di nulla (un tempo quando avevamo i server in casa tra Grapes e l’Enel erano dolori di panza…), perà penso anche, i server ormai hanno due anni, speriamo che non si rompa niente e che tutto prosegua così per il meglio…

Succede così che si arriva a sabato 31 dicembre… e parte la cronistoria:

  • Ore 13.00 (Lo sgomento)
    Mi sveglio e do un’occhiata alla posta, tutto bene… clicco un link di una mail che mi porta a visitare il nostro sito aziendale… www.coresis.com.
    Noto con tristezza e sgomento che il buon firefox 1.5 mi mostra un connection refused (o qualcosa di simile)
    Scattano a questo punto le normali procedure di troubleshooting, telnet porta 80, telnet porta 80 IP numerico, vai in VPN e prova a loggarti in SSH… si sa mai che è scoppiato Apache… no, niente, nada…
    30 secondi di panic mode e poi la lucidità  è nuovamente ritornata. Penso che dovrei far finta di nulla, in fondo chi guarda il 31 i siti aziendali ospitati sul nostro server? Ma un barlume di etica mi spinge ad approfondire…
  • Ore 13.30 (La reazione)
    Decido che è giunto il momento di tentare l’accesso dal terminal server, ma niente, una fava.
    Chiamo l’H24, vediamo come sta fisicamente la nostra creatura ferita…
    =============================
    PICCOLO INCISO, CHI E’ COSTUI, QUESTO SERVER DI NOME RAMSES?
    Server HP DL 140 con servizio WEB per i siti dei nostri clienti realizzati e mantenuti da personale Coresis, più servizio FTP aperto solo ai nostri IP aziendali.
    Supporto classico a PHP, MySQL e compagnia bella
    =============================
    La simpatica signorina che mi risponde sostiene che il poveretto ha una spia rossa, come ben sapete il rosso è un colore che nell’informatica da la stessa gioia al sistemista che Bertinotti darebbe a Berlusconi…
    Chiedo di riavviare il server, chissamai, almeno avere una shell per analizzare il problema.
    Niente, nada, un tubo secco.
    P.S. nel frattempo sono stato raggiunto a casa mia da Alessandro Franz, mio socio e sistemista senior che perà nella sua nuova casa non ha nè telefono nè tantomeno ADSL causa mamma Telecom…
    Anche lui chiaramente puà fare ben poco e ripiega su Travian.it che ha ormai impossessato la sua mente…
  • Ore 14.00 (La triste constatazione)
    Chi va in sala macchine il 31 Dicembre 2005?
    Ebbene la scelta ricade sul sottoscritto e sul prode Alessandro N., sistemista senior silenzioso e con il cappellino (questa prima o poi ve la spiegherà) che è di rientro per le 16.00, momento in cui scatta la spedizione. Notare che Franz ospitava gente, mentre il sottoscritto e Alessandro N. avevano impegni di fine anno per le 19.30… ce l’avrebbero fatta i nostri eroi a stappare la bottiglia di spumante a casa di amici anzichè in sala server?
  • Ore 16.00 (Un po’ di ferraglia)
    Andiamo in ufficio a prendere un po’ di materiale necessario, ovviamente:
    – CD di Linux già  pronti erano quasi spariti, reperito uno per miracolo
    – Cacciaviti e balle varie, finiti nell’altro ufficio non si sa perchè ma recuperati
    – Chiamare nostro contatto alle Maldive per dirgli di avvisare le guardie della sala macchine che arrivavano due sistemisti e non ladri
    – Recupero un portatile più piccolo del mio per me, la sala macchine non è esattamente comoda
  • Ore 17.00 (Ha inizio lo show)
    Entriamo in sala macchine, prima operazione, estrarre il cadavere e provare a collegarlo ad un monitor normale, risultato semplici lampeggi della lucina del monitor
    Tentativo di sostituzione RAM, niente, proviamo a togliere un processore alla volta (è un bi-proc XEON), niente… constatazione Ramses è morto e sepolto…
  • Ore 17.15 (Le alternative)
    A questo punto era chiaro che la pizza (il server rack 1U) era bruciata, avevamo diverse strade:
    – Recuperare il backup e far girare tutto sull’altro web server, quello per i clienti che aggiornano il sito da se o tramite terzi, ma c’era il casino dei permessi di MySQL, dover mischiare i DB, insomma… non ci garbava…
    – Spegnere il server dedicato di Openskills (se lo facevamo Franceschi ci mangiava vivi…), mettere il disco di Ramses, riavviare e recuperare Openskills dal backup…
    A posteriori mi pareva la scelta migliore… perà… c’era qualcosa che non ci garbava e abbiamo optato per la terza soluzione
    – Recuperare i dati dal backup, migrare tutto su un’altra macchina che fa backup di altro poco importante… semi-spare e già  installata copiando le varie conf e compagnia bella e procedere con il ripristino dei dati principali (SCELTA FATTA!)
  • Ore 17.45 (Le danze cominciano)
    Per comodità  la macchina che deve sostituire Ramses la chiamiamo Pino.
    L’idea era quella di non inquinare lo status del sistema di Pino con le varie menate di Ramses (es. /etc/passwd, etc…) abbiamo quindi optato per recovery di:
    /home dove stanno tutti i siti
    /var/log/httpd dove stanno i log di Apache
    /etc File di conf di Apache, webalizer etc…
    /var/lib/mysql File binari di MySQL
    Assegnare a Pino anche l’IP di Ramses
    Renderlo raggiungibile dagli uffici Coresis, infatti lavorare in sala macchine è molto scomodo e lungo, abbiamo quindi deciso che a parte il recovery dei dati etc… una volta avuta la connettività  il lavoro di setup lo avremmo fatto dall’ufficio
  • Ore 18.30 (La decisione più estrema)
    La copia di tutti i dati dal backup a Pino richiedeva nonostante la copia via rete da dischi fissi, circa un’ora. Praticamente un’ora persa a guardarci in faccia e lo spumante che si avvicinava…
    Parte la mia proposta, lanciamo su più shell il recovery dei dati, smobilitiamo tutto e torniamo in ufficio guadagnando il tempo del viaggio.
    Nota, se la copia andava male bisogna forse dover tornare in sala macchine e allora si che portavamo dietro lo spumante…
    Il prode Alessandro N. (che non aveva ancora tolto il berretto) mi ha appoggiato e siamo partiti alla volta di Burago di Molgora
  • Ore 19.15 (Il rush finale)
    Arriviamo, attacchiamo i portatili… Situazione:
    Il recovery era finito con successo, il ripristino delle funzionalità  core è stato semplice…
    Qualcuno potrebbe contestare, ma avete lasciato delle shell di root aperte? No, il buon Alessandro si è ricordato di zapparle direttamente dai processi
  • Ore 20.00 (La fine)
    Siamo pronti ognuno per andare dove deve andare a festeggiare il Capodanno…

E’ chiaro che la situazione poteva essere facilmente evitata con Cluster e menate varie… ma… costano…

Un saluto a tutti, soprattutto a Murphy!
Maxgrante

Share

L’articolo ZERO

Ciao a tutti,
questo sito, blog, o come lo volete chiamare voi è scarno, vuoto e senza contenuti ma il progetto è quello di rendere un servizio al mondo Opensource riversando qui informazioni valide, possibilmente fresche e non di parte e trolleggianti.

La speranza è soprattutto quella di ottenere la collaborazione di voi sistemisti, programmatori o semplici appassionati per popolare questo sito e renderlo un piccolo pozzo di informazioni.

Lo scopo è anche quello di fornire un’informazione non di parte, non contro MS o Bill Gates a prescindere ma anzi, di confrontare i due mondi e chiarire diversi aspetti del mondo IT.

Invitandovi ed esortandovi a collaborare vi ringrazio per l’attenzione,

Maxgrante

Share

Articoli, news e pillole sul mondo LAMP e l'opensource. Pillole di C#