• User Attivo

    explode

    Premetto che è la prima volta che sto utilizzando mod rewrite, e non so se sto procedendo nel modo corretto.

    Il codice presente nel file .htaccess per ora è solo questo:

    RewriteEngine On
    RewriteRule ^(.+).html$ pagina.php?id=$1

    Nella pagina index.php ho l'elenco con links delle regioni e delle province:

    es: Lombardia.html dove a pagina.php arriva il parametro Lombardia e si esegue la query dove regione = Lombardia.

    Quando il link è Lombardia/Bergamo.html in pagina.php arriva il parametro $_GET[id] che equivale a Lombardia/Bergamo.

    Con $divisore=explode($_GET[id]); posso ottenere:

    $divisore[0] che in questo caso è Lombardia
    $divisore[1] che equivale a Bergamo in questo esempio.

    Poi eseguo la query in pagina.php dove regione=$divisore[0] e provincia=$divisore[1].

    E funziona, anche se non so sia una procedura corretta nell'utilizzo del mod rewrite.

    Al momento sto "dicendo" al codice: if ($divisore[1]==""){fai questo} else{altra condizione}
    Il punto è che quando arriva solo il parametro determinato dalla regione, esiste solo $divisore[0] e $divisore[1] non esiste, quindi mi riporta l'errore anche se funziona lo script.

    Sto cercando soluzioni.

    Mi sfugge ad esempio una cosa di questo tipo:

    RewriteEngine On
    RewriteRule ^(.+).html$ pagina.php?id=$1&secondoparametro=$2

    in questo caso come devo fare per "recuperare" il secondo parametro, ovvero $2?!

    A presto.


  • User Attivo

    @another said:

    Premetto che è la prima volta che sto utilizzando mod rewrite, e non so se sto procedendo nel modo corretto.

    Il codice presente nel file .htaccess per ora è solo questo:

    RewriteEngine On
    RewriteRule ^(.+).html$ pagina.php?id=$1

    Nella pagina index.php ho l'elenco con links delle regioni e delle province:

    es: Lombardia.html dove a pagina.php arriva il parametro Lombardia e si esegue la query dove regione = Lombardia.

    Quando il link è Lombardia/Bergamo.html in pagina.php arriva il parametro $_GET[id] che equivale a Lombardia/Bergamo.

    Con $divisore=explode($_GET[id]); posso ottenere:

    $divisore[0] che in questo caso è Lombardia
    $divisore[1] che equivale a Bergamo in questo esempio.

    Poi eseguo la query in pagina.php dove regione=$divisore[0] e provincia=$divisore[1].

    E funziona, anche se non so sia una procedura corretta nell'utilizzo del mod rewrite.

    Al momento sto "dicendo" al codice: if ($divisore[1]==""){fai questo} else{altra condizione}
    Il punto è che quando arriva solo il parametro determinato dalla regione, esiste solo $divisore[0] e $divisore[1] non esiste, quindi mi riporta l'errore anche se funziona lo script.

    Sto cercando soluzioni.

    Mi sfugge ad esempio una cosa di questo tipo:

    RewriteEngine On
    RewriteRule ^(.+).html$ pagina.php?id=$1&secondoparametro=$2

    in questo caso come devo fare per "recuperare" il secondo parametro, ovvero $2?!

    A presto.

    Credo che dovresti fare due rule.
    Una per il pattern della regione l'altra per il pattern multiplo.
    Inoltre visto che stai usando una struttura a directory ti sconsiglio di usare l'estensione .html.
    Verrebbe quindi una cosa del genere:

    RewriteRule ^(.+)$ pagina.php?id=$1
    RewriteRule ^(.+)/(.+)$ pagina.php?id=$1&secondoparametro=$2

    In questo modo se l'url combacia con la prima regola ti reindirizza sul primo tipo di url, sennò se ha uno slash va sul secondo.

    Poi nel php invece di splittare con explode fai semplicemente $_GET['id'] e $_GET['secondoparametro'] con i vari "IF" del caso.

    Bada che non ho testato la sintassi quindi potrebbe esserci qualche errore, però il concetto è questo.


  • Super User

    sempre senza test a naso imho non funziona perchè la seconda regola è selettiva mentre la prima becca tutto quindi dovrebbe sovrascrivere la seconda (sarebbe da provare ma è semplice e puoi verificarlo).

    Per quanto riguarda l'errore che ti genera lo script non devi verificare che sia uguale a stringa vuota ma devi verificare che l'array abbia un numero di elementi coerenti oppure testare l'esistenza dell'elemento.

    verificare il numero di elementi:
    if count($array)==2
    //qui ci sono 2 parametri
    else
    //qui ce n'è uno solo

    verificare l'esistenza
    if (isset($array[1])
    //qui ci sono due parametri
    else
    //qui ce n'è uno solo

    ciauz


  • Super User

    personalmente farei così

    RewriteRule ^([^/]+)/([^/]+).html$ pagina.php?regione=$1&provincia=$2
    RewriteRule ^([^/]+)/$ pagina.php?regione=$1

    lombardia/bergamo.html
    lombardia/

    ciao!