- Home
- Categorie
- La Community Connect.gt
- Tutto sulla Community
- Escludere una o più stringhe dal rewrite (prima o poi serve a tutti)
-
Escludere una o più stringhe dal rewrite (prima o poi serve a tutti)
Hi Folks! come butta?
è un po' di tempo che cerco di risolvere una questione che sembra essersi rivelata più ostica del previsto e allora mi chiedo:
ma la soluzione, c'è?vediamo voi cosa ne pensate/supponete o meglio ancora...sapete
supponiamo che io trasferisco tutti gli url del mio sito
alla pagina index.php?cat=patate
e che io utilizzi il seguente codice (funzionante)
RewriteRule ^(.[^\/]+)/$ index.php?cat=$1 ```se io voglio trasferire altre parole ad altre pagine come faccio? ad esempio se voglio trasferire la parola admin alla cartella admin/index.php come fo? dovrei innanzitutto escludere la parola admin da quel codice giusto? e successivamente creare la regola per miosito.it/admin dico bene? beh, la domanda nasce spontanea. come si escludono una o più stringhe dal mod rewrite? grazie in anticipo a chiunque avrà piacere di discuterne. :ciauz:
-
Ho scoperto una cosa per me fantastica!
forse per alcuni di voi avrò solo scoperto l'acqua calda ma vi spiego comunque.
per fare questa esclusione, prima di venire alla conclusione di modificare la prima regola (escludendo) per poi scriverne un'altra, avevo provato normalmente a mettere semplicemente la regola per la singola parola al rigo di dopo....convinto che venisse applicata perchè letta appunto dopo la "regola generale".
Cavolo ho appena scoperto che è esattamente il contrario ovvero la regola "specifica" va scritta prima e tutto magicamente funziona!
ovvero se scrivo
RewriteRule ^(.[^\/]+)/$ index.php?cat=$1 RewriteRule ^admin/(.[^\/]*)/$ admin/index.php?cat=$1
non funziona o meglio anche gli indirizzi che contengono la parola admin vengono reindirizzati su index.php?cat=$1
mentre se inverto l'ordine ovvero
RewriteRule ^admin/(.[^\/]*)/$ admin/index.php?cat=$1 RewriteRule ^(.[^\/]+)/$ index.php?cat=$1
mi funzionano entrambe le regole!
qualcuno saprebbe dirmi come mai?
Di solito in qualsiasi codice scrivi è sempre la riga successiva che ha l'ultima parola....in questo caso è esattamente il contrario!
qualcuno ha anche altre idee o metodi migliori?
daii, sveliamo questo arcano. vi giuro che ho girato in google per ore ma una soluzione non l'avevo ancora trovata.
ciauuz
-
è diverso perchè la prima regola ha un contenuto "statico" (admin)
mentre la seconda parte col riconoscimento di qualsiasi carattere (tranne /)admin è anche [^/], per questo motivo viene applicata lo stesso
non so se mi son spiegato
-
@osvi said:
è diverso perchè la prima regola ha un contenuto "statico" (admin)
mentre la seconda parte col riconoscimento di qualsiasi carattere (tranne /)admin è anche [^/], per questo motivo viene applicata lo stesso
non so se mi son spiegato
ti sei spiegato benissimo ma la cosa che non mi quadra è che la regola a contenuto dinamico dovrebbe "sovrascrivere" l'altra se scritta dopo, giusto?
invece la sovrascrive se scritta prima e, se scritta dopo, funzionano entrambe.
-
ragazzi mi ero sbagliato, la regola singola non annulla quella generale.
qualcuno di voi sa come si fa ad escludere una parola esatta dal rewrite? x:x
-
devi usare RewriteCond
ci stanno esempi chiari sulla documentazione di apache
-
@osvi said:
devi usare RewriteCond
ci stanno esempi chiari sulla documentazione di apache
Ti ringrazio, ho letto la documentazione e spero di aver capito bene, ma non ne sono sicurissimo in quanto il risultato mi funziona in localhost ma non su hosting aruba linux.
Secondo te, è dovuto solo alla configurazione del server o anche a qualche mio grossolano errore?
#ECCEZIONI RewriteCond %{REQUEST_URI} !/(admin|rivenditori)/ #CATEGORIE RewriteRule ^(.[^\/]+)/$ index.php?cat=$1 RewriteRule ^rivenditori/$ rivenditori.php ```grazie:fumato:
-
come non detto, in realtà il problema era un altro.
ho notato che su hosting aruba se fai un redirect del tipo:
RewriteRule ^rivenditori$ rivenditori.php
ed esiste realmente un file che si chiama
rivenditori.php o rivenditori.htm o rivenditori.html il redirect non funziona.
rinomini il file e funziona.
questo fatto in realtà mi ricorda molto la funzione -f documentata in apache che mette come condizione il riconoscimento di quell'indirizzo come file reale o meno, evidentemente abilitata di default in aruba.
chissà come si fa a disabilitarla
grazie di tutto, Adriano.