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

Configurazione di LEMP Stack con Docker e Certificati SSL


Questo tutorial ti guida passo dopo passo nella configurazione di uno stack LEMP con Docker e Docker Compose, integrando la protezione SSL tramite Let’s Encrypt.

Prerequisiti

  • Un server Ubuntu con un utente non root abilitato a sudo e un firewall attivo.
  • Docker e Docker Compose installati.
  • Un dominio registrato con i record DNS configurati (A e www).

Fase 1: Configurazione del Server Web

Crea la directory di configurazione del progetto e il file nginx.conf:


mkdir -p webserver_www/nginx-conf
nano webserver_www/nginx-conf/nginx.conf

            

Inserisci il seguente blocco di configurazione:


server {
    listen 80;
    server_name your_domain www.your_domain;
    root /var/www/html;

    location ~ /.well-known/acme-challenge {
        allow all;
    }

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php_fpm:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
}

            

Nota: Ricordati di sostituire your_domain con il tuo dominio effettivo.

Fase 2: Definizione delle Variabili Ambientali

Crea un file .env per definire variabili sensibili:


nano webserver_www/.env

            

Inserisci i seguenti valori:


MYSQL_ROOT_PASSWORD=your_root_password
MYSQL_USER=your_php_fpm_user
MYSQL_PASSWORD=your_php_fpm_password
MYSQL_DATABASE=your_database

            

Fase 3: Configurazione di Docker Compose

Crea il file docker-compose.yml per definire i servizi:


version: '3'
services:
  db:
    image: mysql:8.0
    env_file: .env
    volumes:
      - dbdata:/var/lib/mysql
    networks:
      - app-network

  php_fpm:
    image: php:8.2-fpm
    volumes:
      - php_fpm:/var/www/html
    networks:
      - app-network

  nginx:
    image: nginx:1.21-alpine
    ports:
      - "80:80"
    volumes:
      - php_fpm:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
    networks:
      - app-network

  certbot:
    image: certbot/certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - php_fpm:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email you@example.com --agree-tos --no-eff-email --staging -d your_domain -d www.your_domain

volumes:
  dbdata:
  php_fpm:
  certbot-etc:

networks:
  app-network:
    driver: bridge

            

Fase 4: Configurazione Certificati SSL

Esegui il comando per ottenere i certificati:


docker-compose up -d certbot

            

Verifica la presenza dei certificati con:


docker-compose exec nginx ls -la /etc/letsencrypt/live

            

Fase 5: Modifica della Configurazione Nginx

Modifica nginx.conf per abilitare HTTPS:


server {
    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
}

            

Fase 6: Rinnovo Automatico dei Certificati

Crea uno script di rinnovo:


#!/bin/bash
docker-compose run certbot renew && docker-compose kill -s SIGHUP nginx

            

Configura un cron job:


crontab -e
# Aggiungi la seguente riga
0 12 * * * /path/to/ssl_renew.sh >> /var/log/cron.log 2>&1

            

Installazione dello stack LEMP dockerizzato con Docker Compose


Questa guida fornisce le istruzioni necessarie ad installare lo stack LEMP utilizzando Docker Compose e a deployare un’applicazione PHP. Verrà creata una semplice applicazione per visualizzare una lista di articoli di un e-commerce.

Prerequisiti

Configurazione dello stack LEMP

Iniziare creando un file docker-compose.yml nella directory del progetto:


services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./app:/var/www/html
      - ./config/nginx:/etc/nginx/conf.d
    depends_on:
      - php
      - mysql

  php:
    image: php:8.2-fpm
    container_name: php
    volumes:
      - ./app:/var/www/html

  mysql:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: ecommerce
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

Creare i file e le directory necessari:


mkdir -p app config/nginx
touch config/nginx/default.conf

Configurare Nginx creando un file default.conf nella directory config/nginx:


server {
    listen 80;
    server_name localhost;

    root /var/www/html;
    index index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Avvio dei container

Eseguire il comando per avviare i servizi:


docker-compose up -d

Verificare che tutti i container siano in esecuzione:


docker-compose ps

Creazione dell’applicazione PHP

Creare un file index.php nella directory app con il seguente contenuto:


<?php
$articoli = [
    ['id' => 1, 'nome' => 'Articolo 1', 'prezzo' => 10.99],
    ['id' => 2, 'nome' => 'Articolo 2', 'prezzo' => 15.99],
    ['id' => 3, 'nome' => 'Articolo 3', 'prezzo' => 8.99],
];

echo "<h1>Lista di articoli</h1>";
echo "<ul>";
foreach ($articoli as $articolo) {
    echo "<li>" . htmlspecialchars($articolo['nome']) . " - $" . number_format($articolo['prezzo'], 2) . "</li>";
}
echo "</ul>";
?>

Test dell’applicazione

Aprire il browser e navigare all’indirizzo http://localhost. Verrà visualizzata la lista degli articoli del nostro e-commerce.

Riferimenti