Htaccess rewrite rule: come si fanno in WordPress e nelle SPA

Foto dell'autore

Andrea Barbieri

 

Home > News feed > Supporto Tecnico > Htaccess rewrite rule: come si fanno in WordPress e nelle SPA

Il file .htaccess (HyperText Access) è un file di configurazione utilizzato dai server web basati su Apache. Una delle sue principali funzioni è la riscrittura degli URL, che può essere estremamente utile per vari scopi, come il SEO o la semplice organizzazione dei contenuti. Utilizza il modulo mod_rewrite per implementare potenti e flessibili regole di riscrittura.

Come funziona una Rewrite Rule nel file .htaccess

Struttura di una Rewrite Rule

Una tipica rewrite rule in un file .htaccess segue questo formato:

RewriteEngine On
RewriteRule ^vecchio-percorso$ nuovo-percorso [opzioni]

In questo esempio, vecchio-percorso è l’URL che desideri riscrivere, e nuovo-percorso è l’URL in cui verrà trasformato. Le opzioni possono includere vari flag, come [L] per indicare che questa è l’ultima regola da applicare.

Applicare una Rewrite Rule Semplice

Supponiamo di voler riscrivere un URL da example.com/prodotto.php?id=1 a example.com/prodotto/1. Ecco come farlo:

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

Qui, ^prodotto/([0-9]+)$ è una espressione regolare che corrisponde a qualsiasi URL che inizia con “prodotto/” seguito da uno o più numeri. Il segnaposto $1 viene utilizzato per inserire la parte numerica dell’URL originale nel nuovo URL.

Aggiungere Flags e Condizioni

Possiamo anche aggiungere condizioni (RewriteCond) per rendere la nostra regola più specifica. Ad esempio:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^prodotto/([0-9]+)$ prodotto.php?id=$1 [L]

Queste condizioni impediscono la riscrittura se l’URL corrisponde a un file o una directory effettivamente esistente.

Trovare il file .htacess su WordPress

In un’installazione tipica di WordPress, il file .htaccess è posizionato nella directory radice del tuo sito web, dove si trovano anche altri file e cartelle importanti come wp-config.php, wp-admin, e wp-content. Tuttavia, in alcune circostanze, il file potrebbe non essere immediatamente visibile per vari motivi.

Come Visualizzare File Nascosti come .htaccess

Il file .htaccess è un file nascosto in sistemi Unix-like, e il punto davanti al nome indica che è un file nascosto. Per visualizzarlo:

  • Se stai utilizzando un client FTP come FileZilla, assicurati che l’opzione per visualizzare i file nascosti sia attivata.
  • Nel caso stai accedendo alla directory attraverso una shell SSH, usa il comando ls -a per elencare tutti i file, inclusi quelli nascosti.
  • Se stai utilizzando un pannello di controllo hosting come cPanel, esiste un’opzione per mostrare i file nascosti nel file manager.

Creare un File .htaccess se Non Esiste

Se non riesci a trovare il file .htaccess, potrebbe essere che non sia stato ancora creato. In tal caso, puoi crearne uno tu stesso:

1. Crea un file vuoto e chiamalo ".htaccess" (assicurati che inizi con un punto).
2. Carica questo file nella directory radice del tuo sito WordPress.
3. Aggiungi le regole necessarie e salva le modifiche.

Modifiche Tramite l’Interfaccia di WordPress

Per alcune operazioni, come la configurazione dei permalink, WordPress tenterà di scrivere le regole direttamente nel file .htaccess. Puoi accedere a questa funzione attraverso il menu “Impostazioni” e quindi “Permalink” nel cruscotto di WordPress.

Importante: Backup e Precauzioni

  • Prima di effettuare qualsiasi modifica al file .htaccess, è altamente consigliato effettuare un backup.
  • Le modifiche a .htaccess possono avere effetti significativi sul comportamento del sito; pertanto, è prudente testarle in un ambiente di sviluppo prima di applicarle al sito live.

Rewrite Rule su Single Page Application

Il fine principale del rewriting delle URL in una SPA è quello di indirizzare tutte le richieste al tuo entry point dell’applicazione, di solito index.html. In questo modo, la logica di routing della tua applicazione JavaScript può prendere il controllo e gestire il cambiamento della vista.

Regole di Base per Rewrite in SPA

Una regola di base per reindirizzare tutte le richieste verso index.html potrebbe apparire come segue:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.html [L]

In questa configurazione, le condizioni RewriteCond verificano che la richiesta non sia per un file o una directory esistente. Se la condizione è soddisfatta, la RewriteRule reindirizza tutte le richieste verso index.html.

Conservare il Path Originale

È importante notare che la regola di cui sopra non altera il percorso URL; la SPA deve ancora leggere la posizione dall’URL per determinare quale vista caricare. Di solito, questo è gestito da librerie di routing front-end come React Router o Vue Router.

Utilizzo con API e Endpoint Esterni

Se la tua SPA comunica con delle API, è possibile che tu voglia escludere certi percorsi dal reindirizzamento. Per farlo, puoi aggiungere ulteriori RewriteCond per evitare la riscrittura di certi URL, come questo:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/api/
RewriteRule ^ index.html [L]

In questo caso, qualsiasi richiesta che inizia con /api/ non verrà reindirizzata verso index.html.

Rewrite: problemi e risoluzioni

Le Rewrite Rule nel file .htaccess spesso possono causare problemi se non configurate correttamente. Ecco alcuni problemi comuni e le relative soluzioni.

Loop di Reindirizzamento Infinito

Uno dei problemi più frequenti con le Rewrite Rule è il loop di reindirizzamento infinito, che può rendere il sito inaccessibile.

  • Soluzione: Utilizza condizioni (RewriteCond) per escludere specifici percorsi o file dal reindirizzamento.

Regole in Conflitto

Se più regole sembrano interferire l’una con l’altra, potresti ottenere risultati inaspettati.

  • Soluzione: Organizza le regole in un ordine logico e utilizza l’opzione [L] per interrompere l’elaborazione ulteriore delle regole dopo una corrispondenza.

File o Directory Inaccessibili

Alcune regole potrebbero impedire l’accesso a file o directory essenziali.

  • Soluzione: Aggiungi condizioni per escludere questi file o directory dalle Rewrite Rule.

Errore 500: Internal Server Error

Un errore nella sintassi delle Rewrite Rule può portare a un errore 500.

  • Soluzione: Controlla attentamente la sintassi e il formato delle tue regole. Utilizza gli strumenti di validazione e testa le modifiche in un ambiente di sviluppo.

Problemi con HTTPS

Se il sito non riesce a forzare correttamente la connessione HTTPS, potrebbe esserci un problema con le tue Rewrite Rule.

  • Soluzione: Assicurati di avere una regola specifica per reindirizzare il traffico da HTTP a HTTPS.

Strumenti e Tecniche per il Debugging

  • Verifica che il modulo mod_rewrite sia attivo sul tuo server Apache.
  • Utilizza il log di rewrite di Apache per identificare e risolvere problemi nelle Rewrite Rule. Per abilitarlo, puoi utilizzare direttive come RewriteLog e RewriteLogLevel nel file di configurazione di Apache.
  • Prima di apportare modifiche, esegui sempre un backup del file .htaccess attuale.

Fonti e sitografia

Lascia un commento