- Home
- Categorie
- La Community Connect.gt
- Tutto sulla Community
- Capire la logica del RewriteRule
-
Capire la logica del RewriteRule
Ciao a tutti,
sono riuscito a mettere on line, attraverso il file htaccess, la regola del rewriterule che mi cambia il nome delle pagine (migliorandole in ottica SEO), però non ho capito ancora bene come leggere la logica di questa regola.Ecco la regola che ho usato e che non comprendo ancora al 100%:
[File Htaccess contenente la regola qui sotto]
RewriteEngine On RewriteRule ^([^/]+)_([0-9]+)_([0-9]+)_([0-9]+)\.php$ arredamenti-moderni-scheda-prodotto.php?cat=$2&scat=$3&ID=$4
[variabile che creo nella pagina, in php, dove ci sono i link che portano alla pagina "arredamenti-moderni-scheda-prodotto.php"]
$url_rewrite=strtolower(str_replace(" ","-",stripslashes($primoPiano['campo01']).'_'.$primoPiano['categoria'].'_'.$categoria['cat1liv'].'_'.$primoPiano['ID'].'.php'));
DOMANDE:
- Nella prima parte della regola del RewriteRule ci sono 4 parentesi tonde ... ma cosa rappresentano nello specifico ? perchè ce ne sono 4 e non 3 ad esempio, visto che le variabili alla fine sono 3 ?
- Cosa rappresenta questa "([^/]+)" ? quando usarla ? Oppure quando usare questa e non quest' altra "([0-9]+)" ?
Grazie a tutti per l'aiuto ...
Ciao
-
Ciao!
Nel RewriteRule questa parentesi ([^/]+) sta a indicare una sequenza di caratteri alfanumerici.
Questa invece ([0-9]+) una sequenza di caratteri esclusivamente numerici.
Per ultimo abbiamo ([A-Z,a-z,-]+) che sta a indicare una sequenza di caratteri alfabetici.
Ci sono 4 parentesi nel rewrite perchè il tipo di url che sarà richiesto sarà del tipo:
testo e cifre tipo "ab8cd62e" + carattere fisso "" + numero + carattere fisso "" + numero + carattere fisso "_" + numero + carattere fisso "" + ".php"
I parametri passati tramite GET alla pagina sono 3 perchè credo che il primo sia un nome che non serve alla compilazione della pagina, mentre secondo, terzo e quarto parametro sono ID per ricerche su un DB molto probabilmente, utili alla compilazione specifica della pagina.Spero di esser stato il più chiaro possibile.
Good luck!
-
Ciao...innanzitutto grazie per la risposta.
Ora è quasi tutto chiaro, però mi rimane questo dubbio:la prima parentesi ([^/]+) la devo mettere perchè la pagina, prima di passargli i vari ID (gli altri 3 dati), ha un nome e (prima di essere riscritta) nel mio caso si chiama "arredamenti-moderni-scheda-prodotto.php" ?
Quindi ci va sempre questa prima parentesi, perchè ci sarà sempre il nome di una pagina, giusto?
Eccoti un esempio concreto del mio RewriteRule:
IN ORIGINE E SENZA RewritweRule apparirebbe nel browser così:
arredamenti-moderni-scheda-prodotto.php?cat=$2&scat=$3&ID=$4
POI VIENE RISCRITTA E DIVENTA:
scavolini-cucina-scenery_38_32_333.php
-
no, praticamente è il contrario:
-
il browser client richiede la pagina "scavolini-cucina-scenery_38_32_333.php"
-
il serve riceve la richiesta e compila la pagina "arredamenti-moderni-scheda-prodotto.php?cat=38&scat=32&ID=333"
-
il server restituisce il risultato html al client che gli ha fatto la richiesta
P.S. il client, sul suo browser, nella barra degli indirizzi, visualizzerà "scavolini-cucina-scenery_38_32_333.php" però effettivamente sul server la pagina si chiama "arredamenti-moderni-scheda-prodotto.php" e verrà compilata con i parametri passati tramite modalità GET cat=38, scat=32 e ID=333
Non so se sono stato abbastanza esaustivo.
-
-
si certo, tutto molto più chiaro ora! grazie.
però la domanda è: quella prima parentesi ([^/]+) serve perchè la pagina ha un nome testuale (prima di arrivare ai vari ID) ?
-
Quella prima parentesi, in questo caso, assume il valore "scavolini-cucina-scenery".
Sì, perchè c'è una sequenza alfenumerica prima di "_38_32_333.php".
Nel tuo caso la sequenza è solo alfabetica, ma ci sarebbero potute essere anche cifre prima del primo underscore.
-
ok tutto chiaro ora ... grazie