• User Attivo

    Escludere una o più stringhe dal rewrite (prima o poi serve a tutti)

    Hi Folks! come butta? :fumato:

    è 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

    miosito.it/patate

    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:

  • User Attivo

    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


  • Super User

    è 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 🙂


  • User Attivo

    @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.


  • User Attivo

    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


  • Super User

    devi usare RewriteCond

    ci stanno esempi chiari sulla documentazione di apache


  • User Attivo

    @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:

  • User Attivo

    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 :fumato:

    grazie di tutto, Adriano.