{"id":910,"date":"2012-01-12T00:01:00","date_gmt":"2012-01-11T23:01:00","guid":{"rendered":"http:\/\/www.manuelmarangoni.it\/sir-bit\/?p=910"},"modified":"2016-01-14T14:05:52","modified_gmt":"2016-01-14T13:05:52","slug":"mostrare-i-get-dei-link-come-cartelle-l%e2%80%99uso-di-htaccess-nel-sito-cos%e2%80%99e-e-come-funziona-parte-02","status":"publish","type":"post","link":"https:\/\/www.manuelmarangoni.it\/sir-bit\/910\/mostrare-i-get-dei-link-come-cartelle-l%e2%80%99uso-di-htaccess-nel-sito-cos%e2%80%99e-e-come-funziona-parte-02\/","title":{"rendered":"Mostrare i get dei link come cartelle &#8211; L\u2019uso di htaccess nel sito: cos\u2019\u00e8 e come funziona &#8211; parte 02"},"content":{"rendered":"<p>Nell\u2019<a title=\"Mostrare i get dei link come cartelle \u2013 L\u2019uso di htaccess nel sito: cos\u2019\u00e8 e come funziona \u2013 parte 01\" href=\"https:\/\/www.manuelmarangoni.it\/sir-bit\/899\/mostrare-i-get-dei-link-come-cartelle-l\u2019uso-di-htaccess-nel-sito-cos\u2019e-e-come-funziona-parte-01\">articolo precedente<\/a> abbiamo visto cos\u2019\u00e8 l\u2019<em>.htaccess<\/em> e il suo funzionamento di base.<br \/>\nAdesso ci occuperemo di scendere nei dettagli e di mostrare le direttive pi\u00f9 complesse, per gestire ogni situazione possibile.<br \/>\nAl termine dell\u2019articolo <strong>sarete in grado di agire tanto sui link con valori statici quanto su quelli con valori dinamici, e di personalizzare eventuali pagine di errore<\/strong>.<\/p>\n<h2>L\u2019uso delle regole: ignorare alcune cartelle e gestire i link con i get<\/h2>\n<p>Entriamo nel cuore dell\u2019<em>.htaccess<\/em>. Sotto al codice che abbiamo visto prima, possiamo stabilire delle regole precise. Innanzitutto, dobbiamo <strong>specificare quali delle cartelle non saranno coinvolte dalle direttive<\/strong>: questo ci sar\u00e0 utile, per esempio, per le cartelle contenenti le immagini o i javascript.<\/p>\n<p><!--more--><\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"text\" style=\"font-family: monospace;\">#Cartelle da ignorare\r\nRewriteCond %{REQUEST_URI} img\/ [OR]\r\nRewriteCond %{REQUEST_URI} js\/\r\nRewriteRule ^(.*) $1 [L]<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Il <em>RewriteCond<\/em> corrisponde alla condizione <code>if<\/code> dei linguaggi di programmazione: se quello che c\u2019\u00e8 scritto si verifica, allora si applicher\u00e0 la regola del <code>RewriteRule<\/code>.<br \/>\nIn pratica abbiamo stabilito che gli indirizzi che fanno riferimento alle cartelle \u201cimg\u201d e \u201cjs\u201d rimarranno come sono e non saranno modificati. L\u2019attributo <code>[L]<\/code> specifica che, nel caso sia trovato uno dei due indirizzi, la parte sotto che andremo a comporre con altre direttive non sar\u00e0 letta.<\/p>\n\n<p>Adesso vediamo come <strong>trasformare un link pieno di valori get nella forma voluta<\/strong>:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"text\" style=\"font-family: monospace;\">#Esempio di trasformazione di un link con valori statici\r\nRewriteRule ^prodotti\/ categoria.php?prod=divano&amp;cat=promozioni [L]<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>In questo caso la direttiva \u00e8 semplice: quando l\u2019indirizzo base sar\u00e0 esattamente nella forma \u201cwww.sito.it\/categoria.php?prod=divano&amp;cat=promozioni\u201d gli utenti lo vedranno nel loro browser nella forma \u201cwww.sito.it\/prodotti\/\u201d.<br \/>\nSi tratta, in parole povere, di un sostituto. I due get originali (\u201cprod\u201d e \u201ccat\u201d) sono ancora esistenti, ma per gli utenti non saranno visibili. Se per qualche motivo doveste fare dei controlli sul valore di \u201cprod\u201d, vi basta fare come al solito:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_GET<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'prod'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">==<\/span><span style=\"color: #0000ff;\">\"divano\"<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\t<span style=\"color: #666666; font-style: italic;\">\/\/azioni varie<\/span>\r\n<span style=\"color: #009900;\">}<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><strong>Una nota importante: la priorit\u00e0. L\u2019<em>.htaccess<\/em> legge le direttive in ordine<\/strong> cos\u00ec come gli sono presentate. Questo significa che la prima direttiva trovata ha la priorit\u00e0. Per esempio:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"text\" style=\"font-family: monospace;\">#Ordine di lettura delle direttive\r\nRewriteRule ^prodotti\/ categoria.php?prod=divano&amp;cat=promozioni [L]\r\nRewriteRule ^categorie\/ categoria.php?prod=divano&amp;cat=promozioni&amp;pag=1 [L]<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Se noi gli andiamo a passare questo link<br \/>\n<code>http:\/\/www.sito.it\/categoria.php?prod=divano&amp;cat=promozioni&amp;pag=1<\/code><br \/>\nl\u2019utente vedr\u00e0 scritto sul suo browser \u201chttp:\/\/www.sito.it\/prodotti\/\u201d e non \u201chttp:\/\/www.sito.it\/categorie\/\u201d come ci si potrebbe aspettare. Perch\u00e9? La seconda direttiva non \u00e8 altro che la prima con l\u2019aggiunta di un altro valore get (\u201cpag\u201d): l\u2019<em>.htaccess<\/em> vede che, effettivamente, la prima regola coinvolge il nostro link, indipendentemente dai valori che ci sono dopo, e quindi esegue la direttiva; il fatto che ci sia <strong>il parametro [L] significa che, a quel punto, smette di leggere le direttive successive<\/strong>: per cui non vedr\u00e0 mai la seconda direttiva.<br \/>\nSe il parametro [L] non ci fosse stato, per\u00f2, l\u2019<em>.htaccess<\/em> avrebbe invece proseguito e avrebbe incontrato la seconda direttiva, che sarebbe andata a sovrascrivere la prima.<\/p>\n<h3 style=\"margin-top: 50px; margin-bottom: 20px; color: #c00;\">Gestire i link con valori dinamici e l\u2019uso delle espressioni regolari<\/h3>\n<p>Facciamo un passo avanti. Vediamo <strong>il caso in cui i valori nei link siano creati dinamicamente<\/strong> attraverso delle variabili php. Per esempio:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #000088;\">$prod<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #0000ff;\">\"divano\"<\/span><span style=\"color: #339933;\">;<\/span>\r\n<span style=\"color: #000088;\">$tipo<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #0000ff;\">\"promozioni\"<\/span><span style=\"color: #339933;\">;<\/span>\r\n<span style=\"color: #000088;\">$link<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #0000ff;\">\"http:\/\/www.sito.it\/categoria.php?prod=<span style=\"color: #006699; font-weight: bold;\">$prod<\/span>&amp;cat=<span style=\"color: #006699; font-weight: bold;\">$tipo<\/span>\"<\/span><span style=\"color: #339933;\">;<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Noi abbiamo stabilito manualmente il valore delle variabili $prod e $tipo, ma cosa succederebbe se non fossero stabilite a priori, a esempio perch\u00e9 estratte dal database? Come \u00e8 possibile far leggere all\u2019<em>.htaccess<\/em> dei valori dinamici?<\/p>\n<p>Per agire correttamente, <strong>dovremmo far uso delle espressioni regolari<\/strong>. E\u2019 la parte del tutorial pi\u00f9 complessa da capire e che pu\u00f2 portare il maggior numero di errori, ma ci permette di gestire qualsiasi tipo di stringa.<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"text\" style=\"font-family: monospace;\">#Regola per gestire link con valori dinamici\r\nRewriteRule ^([a-z0-9\\-]{3,50})\/(.*)\/ categoria.php?prod=$1&amp;cat=$2 [L]<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>L\u2019<em>.htaccess<\/em> legger\u00e0 le variabili $1 e $2 e le trasformer\u00e0 nella forma stabilita a inizio regola, nello stesso ordine con cui sono state lette.<br \/>\nNel nostro esempio, l\u2019utente vedr\u00e0 il link nella forma:<br \/>\nhttp:\/\/www.sito.it\/divano\/promozioni\/<\/p>\n<p>Diamo un\u2019occhiata alle espressioni regolari che abbiamo usato per \u201cconvertire\u201d le variabili $1 e $2 nella forma voluta:<br \/>\n<strong>([a-z0-9\\-]{3,50})<\/strong> indica che la variabile passata \u00e8 valida nel caso in cui sia composta da valori alfanumerici e abbia una lunghezza compresa tra 3 e 50<br \/>\n<strong>(.*)<\/strong> indica che qualsiasi valore passato sar\u00e0 valido, quindi non verr\u00e0 fatto nessun controllo sulla stringa della variabile $2<\/p>\n<p>Nel caso in cui anche una sola delle due espressioni regolari non sia verificata, la regola non \u00e8 valida e il link non viene convertito.<\/p>\n<p>Potete capire come anche i link pi\u00f9 complessi, con una certa esperienza, possano assumere la forma voluta. L\u2019importante \u00e8 conoscere a fondo le espressione regolari.<\/p>\n<h2>Personalizzare le pagine di errore<\/h2>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"text\" style=\"font-family: monospace;\">#Personalizzazione della pagina di errore\r\nErrorDocument 404 \/errore.php\r\nErrorDocument 403 \"Impossibile accedere\"<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>La regola specifica che in caso di errore 404 (pagina non trovata) verr\u00e0 caricata la pagina <code>errore.php<\/code>, mente in caso di errore 403 l\u2019utente si vedr\u00e0 apparire sullo schermo la scritta \u201cImpossibile accedere\u201d.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>L&#8217;htaccess \u00e8 un file di testo che indica delle direttive da eseguire, con le quali \u00e8 possibile modificare l&#8217;aspetto dei link e personalizzare le pagine di errore.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[54,50],"class_list":["post-910","post","type-post","status-publish","format-standard","hentry","category-programmazione","tag-htaccess","tag-usabilita","cat-3-id"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/910"}],"collection":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/comments?post=910"}],"version-history":[{"count":11,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/910\/revisions"}],"predecessor-version":[{"id":2259,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/910\/revisions\/2259"}],"wp:attachment":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/media?parent=910"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/categories?post=910"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/tags?post=910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}