Apache mod_rewrite, esempi pratici

Un modo per approcciare l’utilizzo delle regole del mod_rewrite è quello di sperimentare semplici esempi pratici nel file .htaccess. Assicurati che il modulo mod_rewrite sia abilitato sul tuo server
Apache prima di provare questi esempi.


1. Abilitare mod_rewrite
e Configurare il File

Assicurati di includere queste righe all’inizio del file
.htaccess:


RewriteEngine On

2. Reindirizzare una Pagina Specifica

Reindirizza una vecchia pagina a una nuova URL.


RewriteRule ^old-page.html$ /new-page.html [R=301,L]
  • Significato:

    • ^old-page.html$:
      Corrisponde alla richiesta per old-page.html.

    • /new-page.html:
      URL di destinazione.

    • [R=301,L]: Effettua un redirect
      permanente (301) e termina le altre regole.


3. Rimuovere "www" dall’URL

Forza la rimozione di www dai tuoi
URL.


RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
  • Significato:

    • RewriteCond
      %{HTTP_HOST} ^www\.(.*)$: Corrisponde agli URL che iniziano
      con www.

    • %1:
      Cattura il dominio senza www.

    • [R=301,L]: Effettua un redirect
      permanente.


4. Aggiungere "www" all’URL

Forza l’aggiunta di www agli URL.


RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
  • Significato:

    • RewriteCond
      %{HTTP_HOST} !^www\.: Corrisponde agli URL senza www.

    • %{HTTP_HOST}: Utilizza il
      dominio corrente.


5. Creare URL SEO-Friendly

Trasforma un URL con query string in un URL più leggibile.


RewriteRule ^product/([0-9]+)$ /product.php?id=$1 [L]
  • Esempio:

    • URL richiesto: /product/123

    • URL effettivo: /product.php?id=123


6. Reindirizzare Tutte le Richieste HTTPS

Forza tutte le richieste a utilizzare HTTPS.


RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
  • Significato:

    • RewriteCond
      %{HTTPS} !=on: Corrisponde alle richieste non HTTPS.

    • %{HTTP_HOST}: Inserisce il
      dominio corrente.


7. Reindirizzare una Directory Specifica

Reindirizza tutte le richieste a una directory verso una nuova
destinazione.


RewriteRule ^old-directory/(.*)$ /new-directory/$1 [R=301,L]
  • Significato:

    • ^old-directory/(.*)$:
      Corrisponde a tutti i file all’interno di old-directory.

    • $1: Cattura il percorso del
      file e lo utilizza nella nuova directory.


8. Bloccare l’Accesso a una Specifica IP

Blocca l’accesso da un indirizzo IP specifico.


RewriteCond %{REMOTE_ADDR} ^192\.168\.1\.1$
RewriteRule ^ - [F]
  • Significato:

    • RewriteCond
      %{REMOTE_ADDR} ^192\.168\.1\.1$: Corrisponde all’indirizzo
      IP 192.168.1.1.

    • [F]: Restituisce un errore 403
      Forbidden.


9. Riscrivere la Homepage

Riscrivi una richiesta alla homepage per utilizzare un file
diverso.


RewriteRule ^$ /index.php [L]
  • Significato:

    • ^$:
      Corrisponde alla radice del sito (homepage).

    • /index.php: Reindirizza tutte
      le richieste alla homepage al file index.php.


10. Riscrivere URL Statici a Dinamici

Trasforma un URL statico in uno dinamico.


RewriteRule ^blog/([a-zA-Z0-9-]+)/([0-9]+)$ /blog.php?slug=$1&id=$2 [L]
  • Esempio:

    • URL richiesto:
      /blog/my-article/123

    • URL effettivo: /blog.php?slug=my-article&id=123


11. Limitare l’Accesso a File Specifici

Blocca l’accesso diretto a file .ini
o .env.


RewriteRule \.(ini|env)$ - [F]
  • Significato:

    • \.(ini|env)$:
      Corrisponde a file con estensione .ini
      o .env.

    • [F]: Restituisce un errore 403
      Forbidden.


12. Pagine di Errore Personalizzate

Reindirizza gli errori 404 a una pagina personalizzata.


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /error-page.html [L]
  • Significato:

    • !
      indica "non esiste".

    • Reindirizza le richieste a /error-page.html.


Come Provare e Testare

  1. Crea il file .htaccess
    nella webroot del tuo sito
    .

  2. Inserisci una delle regole sopra.

  3. Testa le regole nel browser o con uno strumento come curl:

    
    curl -I http://localhost/old-page.html
  4. Controlla i log di Apache per verificare eventuali errori:

    
    tail -f /var/log/apache2/error.log

Esaminiamo queste direttive nel file .htaccess



   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_URI} !/contents
   RewriteRule ^(.*?)$ pagina2.php?url=$1 [L,QSA] 

Questa configurazione del file .htaccess
utilizza il modulo mod_rewrite di Apache per
riscrivere gli URL in modo dinamico. Analizziamo ciascuna direttiva:


1. RewriteEngine On

  • Cosa fa:
    Attiva il modulo mod_rewrite
    per abilitare la riscrittura degli URL.


2. RewriteCond

Le direttive RewriteCond sono
condizioni che devono essere soddisfatte prima che venga applicata la
regola RewriteRule. Analizziamo ogni
condizione:

RewriteCond %{REQUEST_FILENAME} !-f

  • Significato:
    Verifica che il file
    richiesto non esista fisicamente nel filesystem.

    • %{REQUEST_FILENAME}
      rappresenta il percorso completo del file richiesto.

    • !-f
      significa "non è un file".

  • Effetto:
    La regola successiva verrà
    applicata solo se il file richiesto non esiste.

RewriteCond %{REQUEST_FILENAME} !-d

  • Significato:
    Verifica che la directory
    richiesta non esista fisicamente.

    • !-d
      significa "non è una directory".

  • Effetto:
    La regola successiva verrà
    applicata solo se la directory richiesta non esiste.

RewriteCond %{REQUEST_URI} !/contents

  • Significato:
    Verifica che l’URL
    richiesto non contenga la stringa /contents.

    • %{REQUEST_URI}
      rappresenta il percorso richiesto nell’URL.

  • Effetto:
    La regola successiva non si
    applica alle richieste che contengono /contents.

3. RewriteRule

Sintassi:


RewriteRule ^(.*?)$ pagina2.php?url=$1 [L,QSA]
  • Cosa fa:
    Applica una riscrittura
    dell’URL alle richieste che soddisfano tutte le condizioni sopra.

Componenti:

  1. ^(.*?)$

    • Questo è un’espressione regolare
      che corrisponde a qualsiasi stringa nell’URL.

    • (.*?)
      cattura tutto il percorso richiesto (escluso il dominio).

    • L’intera stringa catturata viene
      salvata in $1.

  2. pagina2.php?url=$1

    • L’URL richiesto viene riscritto in modo che punti al file
      pagina2.php con un parametro url
      che contiene la stringa catturata ($1).

    Esempio:

    • Richiesta: /some/path

    • Riscrittura:
      /pagina2.php?url=some/path

  3. Flag [L,QSA]:

    • [L]:
      Indica che questa è l’ultima regola da applicare (terminate le
      elaborazioni successive).

    • [QSA]:
      Aggiunge i parametri della query string originale (se presenti)
      all’URL riscritto.

    Esempio con query string:

    • Richiesta: /some/path?key=value

    • Riscrittura: /pagina2.php?url=some/path&key=value


Comportamento Complessivo

  1. La regola viene applicata solo se:

    • Il file richiesto non esiste.

    • La directory richiesta non
      esiste.

    • L’URL richiesto non
      contiene
      /blog.

  2. Se tutte le condizioni sono soddisfatte, l’URL viene
    riscritto per puntare a pagina2.php,
    passando il percorso originale come parametro url.


Esempi Pratici

  1. URL richiesto: /blog/article

    • File /blog/article
      non esiste.

    • Directory /blog
      non esiste.

    • L’URL non contiene /admin,
      /contents, o /include.

    • Risultato:
      /pagina2.php?url=blog/article

  2. URL richiesto: /contents/uploads

    • L’URL contiene /contents.

    • Risultato: La
      riscrittura non viene applicata.

  3. URL richiesto: /contents/images

    • L’URL contiene /contents.

    • Risultato: La riscrittura non viene
      applicata.


Esaminiamo queste direttive nel file .htaccess



   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)([^/])$ /$1$2/
   [L,R=301]

Questa configurazione del file .htaccess
utilizza il modulo mod_rewrite di Apache per
aggiungere una barra finale agli URL che non puntano a file
esistenti. Analizziamo le direttive in dettaglio.


1. RewriteEngine On

  • Cosa fa:
    Attiva il modulo mod_rewrite,
    necessario per utilizzare le regole di riscrittura degli URL.


2. RewriteCond %{REQUEST_FILENAME} !-f

  • Cosa fa:
    Verifica che il percorso
    richiesto non sia un file esistente.

    • %{REQUEST_FILENAME}
      rappresenta il percorso del file richiesto sul filesystem.

    • !-f
      significa "non è un file".

  • Effetto:
    La regola successiva
    (RewriteRule) verrà applicata solo se
    il file specificato nella richiesta non esiste.


3. RewriteRule

Sintassi:


RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301]
  • Espressione Regolare:

    • ^(.*)([^/])$:

      • ^(.*):
        Corrisponde a qualsiasi stringa (zero o più caratteri) e la
        cattura in $1.

      • ([^/]): Corrisponde all’ultimo
        carattere del percorso purché non sia una barra (/)
        e lo cattura in $2.

    Esempio di Corrispondenza:

    • URL: /example

      • $1 =
        "example"

      • $2 = "e"

    • URL: /folder/page

      • $1 =
        "folder/pag"

      • $2 = "e"

    Non Corrisponde:

    • URL: /folder/
      (Perché
      termina già con una barra /).

  • Riscrittura dell’URL:
    /
    viene aggiunto alla fine dell’URL catturato. Il risultato finale è
    $1$2/.

    Esempio di Riscrittura:

    • Richiesta: /example

      • Riscrittura: /example/

    • Richiesta: /folder/page

      • Riscrittura: /folder/page/


4. Flag [L,R=301]

  • [L]:
    Indica
    che questa è l’ultima regola da eseguire per la richiesta corrente.

    • Apache non controlla ulteriori
      regole dopo questa.

  • [R=301]:
    Effettua
    un redirect permanente (codice HTTP 301) verso
    l’URL riscritto.

    • Il browser viene informato che l’URL è stato spostato in
      modo permanente.

    Nota: I redirect permanenti possono essere
    memorizzati nella cache dal browser.


Comportamento Complessivo

  1. Condizione:
    La regola si applica solo
    se il file richiesto non esiste fisicamente (!-f).

  2. Azione:
    Se l’URL richiesto non
    termina con una barra
    , Apache aggiunge una barra finale (/)
    utilizzando un redirect permanente (301).


Esempi Pratici

Caso 1: File Esistente

  • URL richiesto: /index.html

    • Il file /index.html
      esiste.

    • Risultato: La regola non viene applicata.

Caso 2: URL senza Barra

  • URL richiesto: /example

    • Il file /example
      non esiste.

    • L’URL non termina con /.

    • Risultato: Redirect permanente a /example/.

Caso 3: URL con Barra Finale

  • URL richiesto: /example/

    • L’URL termina già con /.

    • Risultato: La regola non viene applicata.


Quando Utilizzare Questa Configurazione

  • Questa configurazione è utile per
    garantire uniformità negli URL, specialmente nei siti web che
    utilizzano percorsi senza estensioni di file (ad esempio, /about
    invece di /about.html).

  • Può migliorare l’indicizzazione SEO, poiché previene
    contenuti duplicati tra URL con e senza barra finale.

Esaminiamo queste direttive nel file .htaccess



   RewriteEngine On
   RewriteRule ^pagina$
   pagina.php [L]

Questa direttiva di riscrittura nel file .htaccess
è molto semplice e serve a mappare un URL "pulito" a un
file PHP sul server. Analizziamola in dettaglio:


Direttiva RewriteRule

Sintassi:


RewriteRule ^pagina$ pagina.php [L]
  1. ^pagina$
    (Espressione Regolare)

    • ^:
      Indica l’inizio dell’URL richiesto.

    • pagina:
      Corrisponde esattamente alla stringa pagina.

    • $: Indica la
      fine dell’URL richiesto.

    Esempio di corrispondenza:

    • URL richiesto:
      https://example.com/pagina
      Corrisponde.

    • URL richiesto:
      https://example.com/pagina/
      Non
      corrisponde
      (a meno che non venga configurata un’ulteriore
      regola per gestire il carattere /
      finale).

  2. pagina.php
    (Target della Riscrittura)

    • Specifica che le richieste corrispondenti devono essere
      riscritte verso il file pagina.php
      presente nella directory del server.

    Esempio di Riscrittura:

    • URL richiesto:
      https://example.com/pagina

      • Riscrittura interna:
        https://example.com/pagina.php

  3. Flag [L]
    (Last)

    • Significato:
      Indica che questa è
      l’ultima regola da applicare alla richiesta corrente.
      Una
      volta che questa regola viene applicata, Apache non eseguirà altre
      regole di riscrittura per lo stesso URL.


Comportamento Complessivo

  • L’utente può accedere a
    pagina.php utilizzando l’URL "pulito"
    https://example.com/pagina.

  • Internamente, il server Apache reindirizza la richiesta a
    pagina.php senza cambiare l’URL
    visibile al cliente (riscrittura trasparente).


Esempi Pratici

Caso 1: URL corrispondente

  • Richiesta originale:
    https://example.com/pagina

  • Riscrittura interna:
    https://example.com/pagina.php


Caso 2: URL non corrispondente

  • Richiesta originale:
    https://example.com/pagina/

  • Risultato:
    La regola non si applica,
    poiché l’URL termina con /, che non
    corrisponde a ^pagina$.

  • Soluzione alternativa:
    Aggiungere una
    regola separata per gestire il carattere /
    finale:

    
    RewriteRule ^pagina/?$ pagina.php [L]

Quando Utilizzare Questa Configurazione

  • Per migliorare la leggibilità e
    la semantica degli URL, nascondendo l’estensione del file (.php)
    agli utenti.

  • Per creare URL più "amichevoli"
    e semplici da ricordare.

  • Per uniformare gli URL in un sito web, ad esempio come parte
    di una strategia SEO.

la direttiva RewriteRule si
applica alla parte dell’url successiva al l hostname: ^pagina$
la direttiva RewriteRule
nel contesto di un file .htaccess si
applica alla parte dell’URL che segue il nome di dominio (hostname),
ma non include né il protocollo (http://
o https://) né il dominio stesso
(example.com).

Vediamo in dettaglio come funziona e come viene applicata la
regular expression (espressione regolare):


Scope della RewriteRule

  1. In .htaccess:

    • La regular expression nella RewriteRule
      corrisponde alla parte dell’URL relativa alla webroot.
      Ad
      esempio, se il file .htaccess si trova
      nella directory root del sito (/), la
      RewriteRule considera tutto ciò che segue il dominio.

      Esempio:

      • Richiesta:
        https://example.com/pagina

      • La RewriteRule si applica a:
        pagina.

    • Se il file .htaccess si trova
      in una sottodirectory, ad esempio /subdir,
      l’URL passato alla RewriteRule sarà
      relativo alla sottodirectory. Esempio:

      • Richiesta:
        https://example.com/subdir/pagina

      • La RewriteRule vede: pagina.

  2. In configurazioni globali di Apache (httpd.conf
    o
    virtualhost):

    • La RewriteRule può essere configurata per considerare
      l’intero URL, inclusi hostname e percorso completo. In questi casi,
      può essere necessario specificare l’intero schema.


Applicazione delle Regular Expressions
nella RewriteRule

La sintassi della RewriteRule segue
le convenzioni delle espressioni regolari di base (regex), applicate
alla porzione di URL relativa:

1. Ancora di inizio (^)

  • Specifica che la regex deve
    corrispondere dall’inizio della stringa URL.

  • Esempio:

    
    RewriteRule ^pagina$ pagina.php
    • URL corrispondente: /pagina

    • URL non corrispondente: /subdir/pagina

2. Ancora di fine ($)

  • Specifica che la regex deve
    corrispondere fino alla fine della stringa URL.

  • Esempio:

    
    RewriteRule ^pagina$ pagina.php
    • URL corrispondente: /pagina

    • URL non corrispondente: /pagina/
      o /pagina123.

3. Corrispondenza parziale o completa

  • Se non usi ^
    o $, la regex può corrispondere a
    qualsiasi parte dell’URL.

  • Esempio:

    
    RewriteRule pagina pagina.php
    • URL corrispondenti: /pagina,
      /subdir/pagina, /about/pagina.


Hostname nella RewriteRule

Il file .htaccess non può
direttamente modificare l’hostname
. la direttiva RewriteRule nel contesto di un file .htaccess si applica alla parte dell’URL che segue l’hostname.

  • Cosa non puoi fare:

    
    RewriteRule ^https://example.com/pagina pagina.php

    Questo non funzionerà perché l’hostname non è incluso nella parte
    gestita dalla RewriteRule in .htaccess.


Gestione degli hostname (VirtualHost o
RewriteCond)

Se vuoi gestire l’hostname, devi utilizzare la direttiva
RewriteCond (condizione di riscrittura):

  • Esempio:

    
    RewriteCond %{HTTP_HOST} ^example\.com$
    RewriteRule ^pagina$ pagina.php
    • RewriteCond
      %{HTTP_HOST}
      : Controlla se
      l’hostname richiesto è example.com.

    • RewriteRule:
      Si applica solo se la condizione precedente è vera.


Come Verificare il Comportamento della
Regex

Puoi provare la tua regex con alcuni strumenti online:

  • Regex101:
    Per testare e comprendere come funzionano le regex.

  • Apache mod_rewrite Debugging: Abilita il log
    di riscrittura di Apache per vedere come vengono applicate le
    regole:

    
    LogLevel alert rewrite:trace3

Gestione del file .htaccess nel passaggio da Apache ad Nginx

Il webserver Nginx non interpreta il
file
.htaccess.
Questo file è specifico per Apache e viene utilizzato per
configurare dinamicamente alcune impostazioni a livello di directory.
Nginx, invece, segue un approccio diverso alla configurazione.

Differenze tra Apache e Nginx

  1. Apache:

    • Supporta il file .htaccess
      per permettere configurazioni specifiche a livello di directory.

    • Questo approccio consente agli
      utenti di modificare le impostazioni senza dover accedere ai file
      di configurazione principali (es. httpd.conf).

  2. Nginx:

    • Non supporta .htaccess
      per motivi di prestazioni.

    • Le configurazioni vengono definite globalmente nel file
      principale (nginx.conf) o nei file di
      configurazione dei singoli siti (di solito in
      /etc/nginx/sites-available/).


    La scelta di non supportare .htaccess
    è intenzionale per garantire prestazioni migliori, evitando che il
    server debba leggere e interpretare file di configurazione in ogni
    directory durante una richiesta.


Come Tradurre .htaccess
in Configurazioni per Nginx

Le funzionalità che si trovano comunemente in un file .htaccess
possono essere replicate nella configurazione di Nginx. Ecco alcuni
esempi:

1. Redirect 301 (Permanent Redirect)

In .htaccess:


Redirect 301 /old-page.html /new-page.html

In Nginx (nginx.conf o il file del
sito):


server {
    location = /old-page.html {
        return 301 /new-page.html;
    }
}

2. Riscrittura URL (mod_rewrite)

In .htaccess:


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

In Nginx:


server {
    location / {
        rewrite ^/product/([0-9]+)$ /product.php?id=$1 last;
    }
}

3. Protezione Directory con Password

In .htaccess:


AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user

In Nginx:


server {
    location / {
        auth_basic "Restricted Area";
        auth_basic_user_file /path/to/.htpasswd;
    }
}

Risorse Utili per Configurare Nginx

  • Documentazione ufficiale di
    Nginx
    :
    https://nginx.org/en/docs/
    Include una
    sezione dettagliata su redirect, rewrite
    e altre funzionalità configurabili.

  • Guida alla conversione da .htaccess
    a
    Nginx
    :
    https://www.nginx.com/resources/wiki/start/topics/examples/likeapache-htaccess/

  • Tool di conversione online (non sempre
    perfetto, ma utile come punto di
    partenza):
    https://winginx.com/htaccess


Nginx non ha un file di configurazione equivalente a
.htaccess. A
differenza di Apache, Nginx non supporta configurazioni a livello di
directory che sovrascrivano quelle globali. L’intera configurazione
di Nginx deve essere definita nei file principali, come:

  • nginx.conf
    (file di configurazione principale).

  • File specifici dei virtual host (tipicamente
    in /etc/nginx/sites-available/ e
    /etc/nginx/sites-enabled/ o percorsi
    equivalenti).

Perché Nginx Non Supporta un Equivalente
di
.htaccess?

La mancanza di un file simile a .htaccess
in Nginx è una scelta progettuale per garantire prestazioni elevate.
Nginx carica la configurazione una volta sola all’avvio (o al reload)
e non legge dinamicamente i file di configurazione per ogni
richiesta, come invece fa Apache con .htaccess.
Questo elimina il sovraccarico di lettura e interpretazione dei file
durante l’elaborazione delle richieste.


Alternative in Nginx per
Personalizzazioni a Livello di Directory

Anche se non esiste un file come .htaccess,
è possibile ottenere un comportamento simile configurando sezioni
specifiche nel file di configurazione del server. Alcune alternative
includono:

1. Configurazione per una Directory
Specifica

Puoi definire regole specifiche per una directory nel file del
virtual host o in un blocco location. Ad
esempio:


server {
    root /var/www/miosito;

    # Configurazione per tutte le richieste
    location / {
        index index.html index.php;
    }

    # Regole specifiche per la directory /uploads
    location /uploads/ {
        autoindex on;
        deny all;
    }
}

2. Inclusione di File Locali

Puoi usare la direttiva include per
caricare file di configurazione aggiuntivi che risiedono nella
webroot del sito. Questo approccio consente di simulare il
comportamento di .htaccess (con alcune
limitazioni). Ad esempio:

Struttura dei file:


/var/www/miosito/nginx-custom-rules.conf

Configurazione del virtual host:


server {
    root /var/www/miosito;

    location / {
        include /var/www/miosito/nginx-custom-rules.conf;
    }
}

Con questo approccio, puoi modificare il file nginx-custom-rules.conf
senza toccare i file globali di configurazione di Nginx, ma sarà
comunque necessario eseguire un reload di Nginx per applicare le
modifiche:


sudo systemctl reload nginx

3. Configurazioni Specifiche per Virtual Host

Se hai più siti sullo stesso server, puoi definire configurazioni
uniche per ciascun virtual host. Ad esempio:


server {
    server_name esempio.com;
    root /var/www/esempio;

    # Configurazioni personalizzate
    location / {
        rewrite ^/vecchio-url$ /nuovo-url permanent;
    }
}

In conclusione non esiste un file dinamico come .htaccess
per Nginx, ma puoi ottenere un comportamento simile organizzando la
configurazione globale o per singolo sito con strumenti come:

  • Blocchi location.

  • File di configurazione inclusi con
    include.

  • Configurazioni specifiche per i virtual host.

Il file .htaccess di Apache

Il file .htaccess è
un file di configurazione utilizzato dai server web Apache per
gestire diverse impostazioni a livello di directory. Questo file
consente di modificare la configurazione del server senza dover
accedere ai file principali di configurazione, come httpd.conf.
È molto utile per configurazioni rapide e specifiche di directory o
siti web ospitati su un server.

Ecco le principali caratteristiche e usi del file .htaccess:


1. Scopo e Funzionalità

a. Reindirizzamenti (Redirects)

  • Può essere usato per reindirizzare URL, ad esempio da HTTP a
    HTTPS o per creare URL permanenti.

    
    Redirect 301 /vecchia-pagina.html https://esempio.com/nuova-pagina.html

b. URL Rewriting

  • Grazie al modulo mod_rewrite, è possibile
    creare URL più leggibili e ottimizzate per i motori di ricerca.

    
    RewriteEngine On
    RewriteRule ^pagina$ pagina.php [L]

c. Controllo degli Accessi

  • Limita l’accesso a specifici file o directory.

    
    <Files "config.php">
        Order Allow,Deny
        Deny from all
    </Files>

d. Protezione delle Directory

  • Implementa un’autenticazione tramite nome utente e password.

    
    AuthType Basic
    AuthName "Area Riservata"
    AuthUserFile /percorso/del/file/.htpasswd
    Require valid-user

e. Abilitazione della Compressione

  • Migliora le prestazioni del sito attivando la compressione
    Gzip.

    
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
    </IfModule>

f. Controllo della Cache

  • Gestisce la memorizzazione in cache per migliorare la
    velocità del sito.

    
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType text/css "access plus 1 month"
    </IfModule>

g. Configurazione HTTPS

  • Forza il traffico su HTTPS.

    
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

2. Dove si Trova e Come Funziona

  • Il file .htaccess
    deve essere posizionato nella directory radice del tuo sito web (es.
    /public_html o /www).

  • Le impostazioni in .htaccess si
    applicano alla directory in cui è collocato e alle sue
    sottodirectory.


3. Moduli Necessari

  • Alcune direttive richiedono che
    specifici moduli Apache siano abilitati:

    • mod_rewrite per
      URL rewriting.

    • mod_headers per
      impostazioni dei CORS o della cache.

    • mod_expires per
      il caching.

    • mod_deflate per la compressione.

Per attivare un modulo:


sudo a2enmod nome_modulo
sudo systemctl restart apache2

4. Esempi di Configurazioni Utili

Protezione Hotlinking

  • Evita che altri siti utilizzino le tue risorse (immagini,
    video, ecc.).

    
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^https?://(www\.)?iltuodominio\.com [NC]
    RewriteRule \.(jpg|jpeg|png|gif)$ - [F]

Personalizzazione delle Pagine di Errore

  • Definisce pagine personalizzate per errori comuni.

    
    ErrorDocument 404 /errori/404.html

Forzare il WWW

  • Assicura che il sito venga caricato con www.

    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

5. Note Importanti

  • Prestazioni:
    L’uso di .htaccess può rallentare il
    server rispetto all’inserimento delle stesse direttive nei file di
    configurazione principali (httpd.conf).
    È meglio usarlo solo per esigenze locali o temporanee.

  • Sicurezza: Assicurati di configurare
    correttamente il server per evitare l’accesso diretto ai file
    .htaccess.

    
    <Files ".htaccess">
        Order Allow,Deny
        Deny from all
    </Files>

Linguaggio e Sintassi del File .htaccess

Il file .htaccess utilizza una
sintassi che non è propriamente un linguaggio di programmazione, ma
piuttosto un insieme di direttive configurative definite dal
server Apache
. Queste direttive sono scritte in un formato
specifico, direttamente interpretato da Apache, e seguono le regole
definite dal server stesso.


Il Linguaggio Ha un Nome?

Non esiste un nome ufficiale per il "linguaggio" del
file .htaccess. È generalmente chiamato
semplicemente sintassi di Apache, poiché riflette
le configurazioni che puoi trovare nei file principali di Apache,
come httpd.conf o apache2.conf.
Si tratta di un linguaggio dichiarativo, dove si usano parole chiave
e parametri specifici.


Questa sintassi è stata sviluppata come parte integrante di
Apache HTTP Server. Apache è stato progettato per essere modulare, e
il file .htaccess permette agli
amministratori di configurare il comportamento del server per
specifiche directory senza dover accedere ai file di configurazione
globali.

Molte funzionalità del file .htaccess
derivano dai moduli di Apache, come:

  • mod_rewrite
    (riscrittura URL)

  • mod_headers
    (gestione intestazioni HTTP)

  • mod_auth_basic
    (autenticazione di base)

  • mod_expires (gestione cache)

Ogni modulo aggiunge un set di direttive alla sintassi del file
.htaccess.


Come Imparare a Padroneggiare la Sintassi
del File
.htaccess

1. Comprendere le Direttive di Apache

Il primo passo è capire le basi del funzionamento di Apache. Ecco
le risorse chiave:

2. Struttura delle Direttive

Ogni direttiva ha una struttura semplice:


Direttiva NomeParametro Valore

Ad esempio:


RewriteEngine On
RewriteRule ^pagina$ pagina.php [L]

Le parole chiave come RewriteEngine
o RewriteRule appartengono a moduli
specifici, quindi è essenziale capire quale modulo è responsabile
di una certa funzionalità.

3. Familiarizzare con i Moduli Principali

Imparare a usare .htaccess implica
padroneggiare alcuni moduli chiave. Ecco i più usati e la loro
documentazione:

4. Pratica con Esempi Comuni

Prova a scrivere configurazioni basate su casi pratici, come:

  • Reindirizzamenti (Redirect
    o RewriteRule)

  • Creazione di URL SEO-friendly

  • Impostazioni della cache (ExpiresByType)

5. Risorse per l’Apprendimento

  • Corsi online:

    • Udemy e YouTube offrono corsi per
      principianti su .htaccess.

  • Esercitazioni pratiche:

    • Prova su un server di sviluppo
      locale con Apache installato.

    • Usa strumenti come XAMPP o Docker per testare configurazioni
      .htaccess senza rischi.

6. Strumenti Utili

  • Regex Testing:
    Per le espressioni regolari usate in RewriteRule,
    utilizza un tool come Regex101.

  • Debug Apache: Abilita il log di debug per
    capire eventuali errori con .htaccess:

    
    sudo tail -f /var/log/apache2/error.log

Consigli per Padroneggiare .htaccess

  1. Leggi e sperimenta:
    Crea un ambiente sicuro in locale dove testare file .htaccess.

  2. Consulta la documentazione
    ufficiale
    : Ogni modulo ha una pagina dedicata con esempi
    pratici.

  3. Evita gli errori comuni:

    • Ricorda di abilitare il supporto .htaccess
      nella configurazione principale di Apache:

      
      AllowOverride All
    • Controlla la presenza di moduli richiesti usando:

      
      apachectl -M
  4. Studia le regex: Sono fondamentali per molte
    funzionalità avanzate.

link alla documentazione e a risorse utili

Ecco una raccolta di link utili alla documentazione ufficiale di
Apache e ad altre risorse per imparare a padroneggiare il file
.htaccess:


Documentazione Ufficiale Apache

  1. Documentazione Generale di
    Apache
    :
    https://httpd.apache.org/docs/
    Contiene
    una panoramica completa del server Apache e delle sue
    configurazioni.

  2. mod_rewrite (Riscrittura
    URL)
    :
    https://httpd.apache.org/docs/current/mod/mod_rewrite.html
    Per
    configurare regole di riscrittura avanzate e creare URL
    SEO-friendly.

  3. mod_headers (Gestione Intestazioni
    HTTP)
    :
    https://httpd.apache.org/docs/current/mod/mod_headers.html
    Per
    aggiungere o modificare intestazioni HTTP.

  4. mod_auth_basic (Autenticazione di
    Base)
    :
    https://httpd.apache.org/docs/current/mod/mod_auth_basic.html
    Per
    proteggere directory con autenticazione di base HTTP.

  5. mod_expires (Cache e
    Caching)
    :
    https://httpd.apache.org/docs/current/mod/mod_expires.html
    Per
    configurare la scadenza delle risorse e ottimizzare la cache del
    browser.


Guide e Tutorial Online

  1. HTAccess Guide di Apache
    Lounge
    :
    https://www.apachelounge.com/htaccess/
    Spiegazione
    pratica delle direttive .htaccess con
    esempi.

  2. Guida Completa su .htaccess

    DigitalOcean
    :
    https://www.digitalocean.com/community/tutorials/how-to-use-the-htaccess-file
    Introduzione
    al file .htaccess e utilizzo comune.

  3. SEO e .htaccess
    – Moz
    :
    https://moz.com/blog/using-htaccess-for-seo
    Applicazioni
    del file .htaccess per l’ottimizzazione
    SEO.


Strumenti Utili

  1. Test Regex per
    RewriteRule
    :
    https://regex101.com/
    Strumento
    per creare e testare espressioni regolari.

  2. Generatore di File
    .htaccess:
    https://www.htaccessredirect.net/
    Utile
    per creare configurazioni .htaccess con
    redirect e altre funzionalità.

  3. Debugger Apache:
    Guida alla lettura dei
    log di errore di
    Apache:
    https://httpd.apache.org/docs/current/logs.html


Corsi e Tutorial Video

  1. Udemy – "Mastering
    .htaccess"
    :
    https://www.udemy.com/course/htaccess/
    Corso
    completo (spesso in inglese).

  2. YouTube – .htaccess
    Tutorial
    :
    Playlist gratuita con
    video:
    https://www.youtube.com/results?search_query=.htaccess+tutorial