Visualizzazione dei risultati da 1 a 7 su 7

Discussione: mod_rewrite

  1. #1

    mod_rewrite

    Salve,
    dovrei sfruttare mod_rewrite per riscrivere le pagine dinamiche di una sezione del sito.
    Và detto che il sito è su hosting Linux/Aruba.
    Mi sono fatto un giro sia su html.it > http://server.html.it/articoli/leggi...rite-di-apa/1/

    quì > http://www.giorgiotave.it/wikigt/os/Guida_mod_rewrite e pure su > http://vademecum.aruba.it/start/linux/rewrite.asp

    ....quindi creato il mio .htaccess:
    -----------------------------------------------------------------------------------------
    RewriteEngine On
    RewriteRule ^cartella/benvenuti_a_([^/]+)\/([0-9]+)$ paese.php?a=$1&id=$2
    -----------------------------------------------------------------------------------------

    lo scopo è quello di ottenere da questo:
    miosito.ext/123/paese.php?a=nome&id=numero

    questo:
    miosito.ext/123/cartella/benevenuti_a_nome/numero

    ...se sono quì a piagnucolare ovviamente non ci sono riusctito, e per di più ho le idee confuse perchè la ragazza che ha risposto al mio ticket su aruba dice:
    ....è scritto male il "RewriteRule", perché prima ci va il file da cui si parte e poi quello a cui si arriva. Provi a invertirli.
    mentre sul wiki di GT l' esempio mostra che dopo il "RewriteRule" si mette ^nuovo indirizzo$ e poi quello originale. Chi ha ragione ? , ma sopratutto dove sbaglio ?

    grazie mille per l' eventuale dritta, sono due giorni che tento in vari modi ma niente da fare...

  2. #2
    mod_rewrite è una brutta bestiaccia. A mio avviso la documentazione fornita dalla apache foundation è da processo di Norimberga: per farla breve devi provare e riprovare per capire come funziona (una specie di reverse engineering) o trovare della documentazione decente da qualche altra parte (cosa che non mi è riuscita).

    Per il tuo problema devi tenere presente quanto segue: la regola di RewriteRule NON VIENE applicata sull'URI completo di parametri, ma solo sull'URI nudo e crudo (senza i parametri GET, cioè tutto ciò che viene dopo il ?).

    Per fare quanto chiedi, devi fare una roba del genere:

    codice:
    RewriteEngine On
    RewriteCond %{QUERY_STRING}  a=([^&]+)&id=(.*)
    RewriteRule  (.*)  $1/%1/%2  [L]
    L'unico modo che hai per accedere alla query string (cioè a "?a=nome&id=numero") è usare RewriteCond, non ce ne sono di banane. Applichi il pattern alla query string e, se verificato, esegue il successivo RewriteRule.

    Nel RewriteRule puoi usare $n (dove 0<n<9) per riferirti alle parentesi tonde in RewriteRule e %n (dove 0<n<9) per riferirti alle parentesi tonde in RewriteCond.

  3. #3

    Re: mod_rewrite

    Originariamente inviato da dorylinux
    lo scopo è quello di ottenere da questo:
    miosito.ext/123/paese.php?a=nome&id=numero

    questo:
    miosito.ext/123/cartella/benevenuti_a_nome/numero
    Porongo, l'ho visto ora:

    codice:
    RewriteEngine On
    RewriteCond %{QUERY_STRING}  a=([^&]+)&id=(.*)
    RewriteRule  (.*?)/paese\.php.*  $1/benvenuti_a_%1/%2  [L]

  4. #4
    Mi sorge un dubbio amletico: non è che vuoi il contrario? Cioè che l'utente scriva:

    miosito.ext/123/cartella/benevenuti_a_nome/numero

    e a te arrivi una richiesta come:

    miosito.ext/123/paese.php?a=nome&id=numero

  5. #5
    ....allora..., intanto grazie dell' aiuto che mi dai

    quello che voglio ottenere è che, la reale pagina in php sarebbe:
    > miosito.ext/123/paese.php?a=$nome&id=$numero


    venga tramutata in:
    > miosito.ext/123/cartella/benevenuti_a_nome/numero

    dove:
    [list=a][*]"cartella" serve a creare una cartella fittizia.... non si mai ;-)[*]"paese" diventa "benevenuti_a_"[*]la variabile "nome" viene letta e diventa il nome vero, per esempio "Firenze (Fi)"[*]la variabile "numero" viene letta e diventa il numero id vero, per esempio "50"[/list=a]

    ...se possibile senza mettere l' estensione, tipo questo url di html.it x esempio:
    > http://php.html.it/guide/lezione/248...-php-su-linux/
    che è estetico e pure facile da ricordare......

    ...che dici ? ...ce la facciamo ?

  6. #6
    Originariamente inviato da dorylinux
    ...quello che voglio ottenere è che, la reale pagina in php sarebbe:
    > miosito.ext/123/paese.php?a=$nome&id=$numero
    venga tramutata in:
    > miosito.ext/123/cartella/benevenuti_a_nome/numero
    ...
    Ah ok, allora è il contrario. mod_rewrite riceve in ingresso l'URL richiesto (miosito.ext/123/cartella/benevenuti_a_nome/numero) ed "eseguirà" l'URL di uscita (miosito.ext/123/paese.php?a=$nome&id=$numero). Ergo:

    codice:
    RewriteEngine  On
    RewriteRule  ^123/cartella/benvenuti_a_([^/]*)/(.*)  123/paese.php?a=$1&id=$2
    Quando il tuo sito riceverà la richiesta con un URL "123/cartella/benvenuti_a_(...)/(...)", mod_rewrite sostituirà l'URL con il nuovo, riportando i valori tra parentesi nella stringa sostituita. Verrà quindi eseguito il file "123/paese.php" con i relativi parametri "a" e "id".

  7. #7
    ....ntd ed io abbiamo risolto la questione NON creando delle directory "fittizie" perchè sui server Aruba non è contemplata questa possibilità, rifiuta la negoziazione e si inchioda (404).

    ...ecco il log di Apache
    codice:
    Tue Jan 29 21:21:45 2008] [error] [client 123.12.45.888] Negotiation: discovered file(s) matching request: /web/htdocs/www.miosito.ext/home/mia_cartella/città (None could be negotiated )., referer: http://www.miosito.ext/test.php
    ...per chiudere, con un' .htaccess come questo:
    codice:
    RewriteEngine On
    RewriteBase /mia_cartella
    RewriteRule  ^([^/]+)_([^/]+)-([0-9]+)$  $1.php?paese=$2&codice=$3 [L]
    messo all' interno della directory stessa (mia_cartella)
    è stata risolta la questione......

    il risultato è miosito.ext/mia_cartella_provincia_paese_codice

    sui link che puntano alle pagine ho impostato <a href=" <? echo "$provincia_$paese-$codice" ?>">

    ps: guardate a che ora della notte però

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.