URL rewrite
In questo articolo parleremo di URL Rewrite, utilizzando il mod_rewrite in htaccess.
Nella scorsa lezione abbiamo già visto come effettuare un redirect 301, ma se si ha l’esigenza di reindirizzare in modo definitivo le richieste da un vecchio dominio verso uno nuovo, è più corretto utilizzare il mod_rewrite.
Trovate la documentazione ufficiale al seguente link: mod_rewrite.
HP Laptop 15s-eq1005sl, AMD Ryzen 3 3250U, RAM 8GB DDR4, SSD 256GB, AMD Radeon Integrated, Display 15,6" FHD, Antiriflesso, Wi-Fi, BLE, Webcam HD, Lettore di Schede, Windows 11 Modalità S, Argento
379,99 € (a partire da 18 Marzo 2024 14:37 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Apple iPad Air 2 64GB Wi-Fi - Oro (Ricondizionato)
186,89 € (a partire da 18 Marzo 2024 15:18 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Apple PC Portatile MacBook Air 2022 con chip M2: display Liquid Retina 13,6", 8GB di RAM, 256GB di archiviazione SSD storage, tastiera retroilluminata; color Mezzanotte
1.149,00 € (a partire da 18 Marzo 2024 14:37 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Questo modulo lo trovate già installato nei servizi di hosting.
Però è consigliabile utilizzare il blocco If Module mod_rewrite.c così, se per qualsiasi motivo il modulo non dovesse essere attivo, il codice digitato all’interno non viene considerato.
URL rewrite esempi
Facciamo quindi un esempio di URL Rewriting.
Supponiamo quindi di voler reindirizzare il vecchio sito alla nuova URL: www.nuovaurl.it.
Innanzitutto inseriamo il blocco If Module mod_rewrite.c e all’interno specifichiamo di attivare il RewriteEngine impostandolo ad On.
(Ricondizionato) TP-Link TL-WPA4220 KIT Powerline Kit AV600Mbps e WiFi 300Mbps, 2 Pezzi, Homeplug AV2, Porte Ethernet, Plug & Play, Tecnologia Powerline Avanzata, Espandi la Portata WiFi
39,99 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)HP 640 G2, Pc Portatile Notebook intel core i5-6th, Display 14", Ram 16Gb, SSD 512Gb, Pacchetto Libre, W10 (Ricondizionato)
229,00 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Lenovo IdeaPad 3 Notebook, 1.6 Kg, Display FHD da 15.6 pollici - (Processore Intel Core i5-1235U, Scheda Grafica Integrata, RAM 8 GB, 512 GB SSD, WiFi 6, Windows 11) - Misty Blue
499,00 € (a partire da 18 Marzo 2024 14:37 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)RewriteBase definisce il percorso di base da applicare alle regole di riscrittura.
Dopo inseriamo la RewriteRule, in cui specifichiamo l’URL Rewriting utilizzando le espressioni regolari (“regular expressions”, Regex).
Quindi RewriteRule definisce le regole di riscrittura, la forma dell’URL, i flag come lo status code HTTP da restituire, ed altri parametri.
<If Module mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule (.*) http://www.nuovaurl.it/$1 [R=301,L]
</IfModule>
Così tutte le richieste dell’intero sito web saranno reindirizzate verso la nuovaurl specificata.
Possiamo anche utilizzare il RewriteCond, ad esempio chiedendo che tutto il traffico che non arriva al nuovo dominio è reindirizzato comunque sul nuovo dominio.
Quindi utilizzo RewriteCond per impostare le condizioni da esaminare prima dell’applicazione di una regola di riscrittura.
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.nuova-url\.it
RewriteRule (.*) http://www.nuova-url.it/$1 [R=301,L]
Espressioni regolari e flag
Analizziamo quindi alcune espressioni regolari utilizzate nell’esempio sopra:
Espressioni regolari | Spiegazione |
---|---|
^ | Sta ad indicare l’inizio di una stringa. |
$ | Indica la fine di una stringa. |
(.*) | L’asterisco indica una sequenza numerica qualsiasi in un URL. Le parentesi salvano la sequenza numerica in una variabile. |
$1 | Rappresenta una variabile che consente di accedere ai valori memorizzati temporaneamente, salvati utilizzando le parentesi. |
? | Indica 0 o 1 istanze di uno o una sequenza di caratteri. |
. | Indica un carattere qualsiasi. |
* | Indica 0 o N istanze di uno o una sequenza di caratteri. |
\ | Il backslash è utilizzato sia come carattere di escaping, sia per specificare abbreviazioni di sequenze di caratteri. |
Vediamo anche il significato dei flag specificati dentro le parentesi quadre.
Flag:
R – Redirect – [R] indica al web server di eseguire un re-indirizzamento esterno di default tramite codice di stato 302. Quindi se dovesse venir inviato un altro codice, dobbiamo aggiungerlo: ad esempio [R=301].
F – Forbidden – [F] indica al web server di inviare al browser il codice di stato 403, cioè Forbidden. Indica dunque un accesso proibito.
G – Gone – [G] indica al web server di inviare al browser il codice di stato 410, Gone. Inoltre segnala che il sito richiesto non è più presente all’indirizzo inserito.
L – Last – [L] indica al web server di non eseguire altri comandi dopo la RewriteRule attuale. Nella maggior parte dei contesti, ciò significa che se la regola corrisponde allora non verranno elaborate ulteriori regole.
NC – Nocase – [NC] Indica di non prestare attenzione alle lettere maiuscole o minuscole, quando un URL rispetta le condizioni per il rewriting.
C – Chain – [C] indica di considerare la RewriteRule successiva, solo se si verifica la condizione attuale.
Riscrivere un URL dinamico
Supponiamo adesso di riscrivere un URL dinamico, come ad esempio questo: http://www.miodominio.it/a/prodotti.php?categoria=miacategoria
TECLAST F16Pro PC Portatile 15,6 Pollici FHD, 16GB RAM 512GB SSD, Intel N95 Notebook(fino a 3.4Ghz), Tastiera Retroilluminata Computer Portatile, WiFi 6/BT 5.0, HDMI, Type C, USB3.0, Laptop 2024
369,99 € (a partire da 18 Marzo 2024 14:37 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)LENOVO, pc desktop pronto all'uso, computer pc fisso intel i5, ram 16gb, ssd 512gb, pacchetto libre, W10 (Ricondizionato)
138,00 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Apple iPad Pro 12.9 (1st Gen) 128GB Wi-Fi - Grigio Siderale (Ricondizionato)
422,89 € (a partire da 18 Marzo 2024 15:18 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)in un URL statico come questo: http://www.miodominio.it/categoria/miacategoria.
Ecco dunque il codice d’esempio:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/categoria/(.*)$ /a/prodotti.php?categoria=$1
</IfModule>
Cioè, se un utente inserisce l’URL statico http://www.miodominio.it/categoria/miacategoria, il web server lo riscrive grazie a quanto specificato nel mod_rewrite (gli utenti non lo vedono) in http://www.miodominio.it/a/prodotti.php?categoria=miacategoria.
URL Rewriting da non www a www
Facciamo adesso un altro esempio di re-indirizzamento dagli URL senza www alla versione con www:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.miodominio\.it
RewriteRule (.*) http://www.miodominio.it/$1 [R=301,L]
</IfModule>
Togliere estensione .php dall’URL
In quest’altro esempio invece togliamo semplicemente l’estensione .php dagli URL.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)index\.php$ /$1 [R=301,NC]
</IfModule>
Redirect 301 https
Infine, se vogliamo forzare la visualizzazione del sito con il protocollo https potremmo scrivere:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^miodominio\.it [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.miodominio.it/$1 [R,L]
</IfModule>
Questi sono solo alcuni esempi di possibile uso dell’URL Rewrite utilizzando il metodo mod_rewrite del file htaccess.