2013-04-21 21 views
5

voglio usare di mod_rewrite al fine di essere in grado di prendere ogni cartella di un percorso come un particolare parametro di query, ad esempio, si consideri il seguente Apache:Nome percorso mod_rewrite di Apache come parametri di ricerca?

esempio di base

URL richiesto: http://domain.com/shoes/prada/image-1/

Pagina servita: http://domain.com/?cid=shoes&bid=prada&pid=image-1

In questo scenario, ci sono 3 sottocartelle richiesti (/shoes/, /prada/ poi image-1), quindi la prima sottocartella viene passata nella pagina effettiva servita come cid, la seconda come bid e la terza come pid.

esempio completa

Tuttavia, vorrei anche di servire una pagina particolare a seconda del numero di sottocartelle richiesto, per esempio

URL richiesto: http://domain.com/shoes/prada/

Pagina servita: http://domain.com/shop.php?cid=shoes&bid=prada

Finora tutto quello che sono riuscito a trovare è di abbinamento basato espressioni regolari per mod_rewrite ma il mio percorso di varieranno molto, ed è per questo vorrei avere condizioni basate sul numero di cartelle a cui si accede (si prega di notare che non sono bravo con le regex - ritengo che un carattere jolly possa aiutare con questo, ma non sarei sicuro da dove cominciare).

Qualsiasi aiuto su questo sarebbe molto apprezzato! Questo è piuttosto lungo, quindi se hai bisogno di ulteriori informazioni per chiarire, per favore fatemelo sapere!

+0

@faa il primo esempio è stato semplicemente quello di mostrare la base della mia domanda (ad esempio parametri presi dalle cartelle), mentre il secondo è stato quello di mostrare una pagina che è servita in base al numero di parametri. Per "numero di cartelle accessibili" intendevo il numero di parametri passati con l'idea che 1 cartella = 1 parametro, come in questo modo/percorso/alla cartella -> 1 = percorso, 2 = a, 3 = cartella. – Kemebear

risposta

7

Con un po 'di lavoro sono stato in grado di modificare alcune regex e ottenere un set di regole di lavoro per quello che volevo:

RewriteEngine on 
RewriteRule ^(.*)/(.*)/(.*)/(.)?$ product.php?tid=$1&sid=$2&eid=$3 [L] 
RewriteRule ^(.*)/(.*)/(.)?$ brand.php?tid=$1&sid=$2 [L] 
RewriteRule ^(.*)/(.)?$ shop.php?tid=$1 [L] 

Questo è un po' diverso per l'esempio, però è quello che volevo per innanzitutto.

Ciò consente la riscrittura di un massimo di URL da quattro cartelle in profondità, con il "nome" di ogni cartella viene dato come parametro, e ogni ulteriore livello di profondità di riscrivere l'url a una risorsa separata per esempio:

http://x.com/shoes/prada/2011-high-heels/ -> http://x.com/product.php?tid=shoes&sid=prada&eid=2011-high-heels 

Testato su http://martinmelin.se/rewrite-rule-tester/

+1

È possibile "accettare" la propria risposta. – leticia

Problemi correlati