Ubuntu Edgy, mod_rewrite e drupal

E' buona norma avere sempre un ambiente di test sul quale provare i propri programmi prima di metterli in produzione.

Questo blog non sfugge alla regola, esiste infatti un clone di gtrev.it sul mio pc, perfettamente funzionante.

Anzi, esiste sia la versione che c'è in produzione (quella che vedete voi adesso) che la nuova versione, quella con drupal 5.0 rc1.

In questo tutorial spiegherò come impostare Ubuntu Edgy in modo che Drupal funzioni correttamente.

Prerequisiti

I prerequisiti per l'installazione di Drupal sono:

  1. un database mysql. Per una guida su come installare mysql in Edgy, andate qua.
  2. il webserver apache. Per una guida su come installare apache, andate qua.
  3. php. Per una guida su come installare php su Edgy andate qua.

Nuova installazione di Drupal

Installare Drupal è davvero facile. Basta andare sul sito drupal.org, scaricare l'archivio drupal-4.7.5.tar.gz e seguire le istruzioni presenti nel file INSTALL.txt.

La directory standard in cui Apache va a leggere i file è
/var/www
Quindi bisogna scompattare l'archivio in questa directory:

$ cd /var/www
$ sudo cp ~/drupal-4.7.5.tar.gz .
$ sudo tar xzvf drupal-4.7.5.tar.gz

Il terzo comando potrebbe essere usato anche senza impersonare root (sudo).

In questo caso però, i file estratti avrebbero come owner l'utente che ha lanciato il comando tar e non l'utente impostato da chi rilascia Drupal.

Potrebbero quindi sorgere problemi non appena Apache tenta di leggere il contenuto della directory. Consiglio quindi di usare sudo.

Sempre il terzo comando creerà una directory chiamata drupal-4.7.5. Io sono solito rinominare tale directory in drupal:

$ cd /var/www
$ sudo mv drupal-4.7.5/ drupal

In questo modo per vedere la nostra installazione di Drupal non dovremo fare altro che far puntare il nostro browser su:
http://localhost/drupal

Copia locale di gtrev.it

Supponiamo di avere già un'installazione di Drupal felicemente funzionante e di volerla replicare.

Supponiamo inoltre di riuscire ad avere già un backup del database (ad esempio grazie a phpMyAdmin) e di avere un archivio della directory /var/www dov'è pubblicato il nostro sito.

  1. Copia del database

    Creiamo dapprima la replica del db. Supponiamo che il file che contiene il backup si chiami drupal.

    $ mysql --user root --password
    mysql > create database drupal_db;
    mysql > exit
    $ mysql -user root --password drupal_db < drupal

  2. Copia dell'installazione di Drupal

    Estraiamo adesso l'archivio che contiene la nostra versione di Drupal.

    $ sudo tar xzvf backup-08.01.2007_16-14-08_gtrevit.tar.gz 
    /var/www

  3. Modifica impostazioni
    Dobbiamo cambiare due impostazioni del file:
    sites/default/settings.php
    1. $base_url = 'http://localhost/drupal';
    2. i parametri di accesso al db (hostname, username e password) devono essere adattati all'installazione locale;

Adesso digitando sul browser:
http://localhost/drupal
dovremmo giungere alla pagina iniziale del nostro sito.

Clean urls

Per clean_url si intendono quelle url che non contengono caratteri del tipo '?,=,&'.

Questi caratteri mandano spesso in affanno gli spider dei motori di ricerca e quindi portano ad una scarsa indicizzazione del nostro sito.

Drupal, come molte altre applicazioni web, usa però questi caratteri per accettare parametri in input nella request http.

Ad esempio per accedere al nodo 11 del nostro sito digiteremo:
http://localhost/drupal/?q=node/11

Se però attiviamo la modalità clean_url, accederemo allo stesso nodo attraverso:
http://localhost/drupal/node/11

Drupal è in grado di mappare l'ultima url in quella precedente sfruttando una regola di Apache che si chiama RewriteRule.

Tipicamente tali regole si trovano nel file .htaccess fornito assieme a Drupal. Nel caso specifico la regola è:

# Rewrite current-style URLs of the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Le condizioni affinché Apache analizzi il file .htaccess fornito con Drupal sono due:

  1. deve essere caricato il modulo mod_rewrite;
  2. deve essere abilitato l'override per la directory /var/www

Caricare mod_rewrite
L'installazione di Apache in Edgy non carica di default il mod_rewrite, ma è molto semplice farglielo fare:

$ sudo a2enmod rewrite   #abilita il modulo
$ sudo /etc/init.d/apache2 restart   #fa ripartire apache

Abilitare l'override
Apache inizierà a considerare le regole presenti nei nostri file .htaccess solo quando gli daremo il permesso di farlo.

Andiamo dunque nella directory sites-available:
$ cd /etc/apache2/sites-available/
ed editiamo il file 'default'. Andiamo in cerca della directory /var/www e cambiamola aggiungendo 'AllowOverride All'.

Dopo la modifica, nel file si dovrebbe leggere:

<Directory /var/www/>
 Options Indexes FollowSymLinks MultiViews
 AllowOverride all 
 Order allow,deny
 allow from all
 # Uncomment this directive is you want to see apache2 
 # default start page (in /apache2-default) when you go to /
 #RedirectMatch ^/$ /apache2-default/
</Directory>

Ora le clean url doverbbero essere correttamente interpretate. A questo punto la replica locale del nostro sito è completa!

Programmazione: 

Aggiungi un commento