• User Newbie

    RewriteRule .htaccess

    Salve a tutti.
    Sono giorni che continuo a perdere sanità mentale dietro ad alcune semplici condizioni di Rewrite degli url del mio sito.
    Inutile postarvi il codice che ho fatto in quanto non funziona, e, ormai, sto procedendo a tentativi più o meno logici.

    Chiedo a qualche esperto o pratico di .htaccess di aiutarmi con la compilazione dello stesso.

    Vi espongo la struttura del sito:
    -index.php -> pagina contenente il login che rimanda a dashboard.php
    |>Questa pagina può contenere una query string "c"

    -dashboard.php -> pagina che permette di selezionare, nel caso non sia già impostata, la variabile "c" della Query string. Selezionata la variabile, rimanda alla pagina home.php?c=xxx&p=yyy
    |>Questa pagina può contenere una query string "c"

    -home.php?c=xxx&p=yyy -> Questa pagina racchiude tutte le pagine principali del sito. Contiene sempre la variabile "c" nella query string ed aggiunge la variabile "p" contenente il nome della pagina.

    Se mancano le variabili della query string, il sito mi rispedisce automaticamente alla prima pagina che mi permette di riselezionarle.

    Vi faccio una lista delle possibili combinazioni che l'url "sporco" può avere e di come dovrebbe essere reindirizzato.

    localhost/index.php -> localhost/
    localhost/ -> localhost/
    localhost/?c=xxx -> localhost/xxx/
    localhost/index.php?c=xxx -> localhost/xxx/
    localhost/dashboard.php -> localhost/dashboard/
    localhost/dashboard.php?c=xxx -> localhost/dashboard/xxx/
    localhost/home.php?c=xxx&p=yyy -> localhost/xxx/yyy/

    (localhost è l'indirizzo del mio sito, non una cartella)

    Ovviamente le cartelle sulla parte destra della lista non esistono, sono degli url fittizi.
    Mi serve che il sito rimandi sempre e comunque a quegli url fittizi(facendo un redirect dagli url "sporchi"). In pratica, sia che scrivo l'url sulla sinistra, sia che scrivo l'url sulla destra, devo sempre aggiornarmi l'url del browser con quello sulla destra.

    Qualcuno mi può aiutare?


  • User

    Per /xxx/ per fare il rewrite a /index.php?c=xxx hai bisogno del seguente:

    RewriteEngine On
    RewriteRule ^(.*)/$ index.php?c=$1 [L,QSA]
    

    Se l'utente naviga a mydomain.com/help/ il server mostrerà mydomain.com/index.php?c=help

    Qui sotto qualcosa di simile per la variabile p, nota come questa regola è prima dell'ultima regola in modo che sia controllata prima.

    RewriteEngine On
    RewriteRule ^(.*)/(.*)/$ index.php?c=$1&p=$2 [L,QSA]
    RewriteRule ^(.*)/$ index.php?c=$1 [L,QSA]
    
    

    Per la cartella dashboard bisogna che metta la regola sopra queste regole, in modo che di nuovo sia controllata prima ad esempio:

    RewriteEngine On
    RewriteRule ^dashboard/(.*)/$ dashboard.php?c=$1&p=$2 [L,QSA]
    RewriteRule ^dashboard/$ dashboard.php?c=$1&p=$2 [L,QSA]
    RewriteRule ^(.*)/(.*)/$ index.php?c=$1&p=$2 [L,QSA]
    RewriteRule ^(.*)/$ index.php?c=$1 [L,QSA]
    
    

    L'esempio home.php che dai non è possibile in quanto corrisponde alla versione index.php, ma puoi fare come segue:

    RewriteEngine On
    RewriteRule ^home/(.*)/(.*)/$ home.php?c=$1&p=$2 [L,QSA]
    RewriteRule ^home/(.*)/$ home.php?c=$1 [L,QSA]
    RewriteRule ^dashboard/(.*)/(.*)/$ dashboard.php?c=$1&p=$2 [L,QSA]
    RewriteRule ^dashboard/(.*)/$ dashboard.php?c=$1 [L,QSA]
    RewriteRule ^(.*)/(.*)/$ index.php?c=$1&p=$2 [L,QSA]
    RewriteRule ^(.*)/$ index.php?c=$1 [L,QSA]
    

  • User Newbie

    grazie per la risposta, ma c'è una svista in ciò che hai postato. index.php e dashboard non contengono mai "p", ma solo "c"... solo home utilizza entrambe le variabili


  • User Newbie

    UP. Ho bisogno di aiuto


  • User Newbie

    UP. Non abbiamo ancora trovato soluzione al problema. Quella postata da Geek non va bene. Chi mi aiuta?