Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Riscrivere url

  1. #1

    Riscrivere url

    Salve,
    io avrei url del tipo:

    Codice PHP:
    index.php?id=1. 
    Vorrei trasformarle nel tipo


    Codice PHP:
    /pagine/%nomepagina
    %nomepagina% è un valore che viene dato dall'utente nel momento della composizione della pagina e viene memorizzato nella stessa tabella in cui è presente l'id.

    Tabella Pagine

    id | name | title | content |

    devo cambiare gli url rendedoli prima così:

    Codice PHP:
    index.php?page=$nomepagina%. 
    e poi riscrivere?

  2. #2
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    Partiamo dalla semantica , invece di name direi che il campo lo si "dovrebbe" chiamare link.
    Il campo sarà UNIQUE di tipo Varchar, e verrà utilizzato al posto dell'id numerico per recuperare il record. In parte è un emulazione del comportamento del filesystem:
    - apri il file in /percorso/al/file/nom.ext (SELECT * FROM ...)
    - salva il file in /percorso/al/file/nom.ext, controlla prima che non esista già, gestisci l'errore se esiste (INSERT INTO ...)

    Serve una funzione che dato un titolo contenente anche caretteri speciali, restituisca una stringa da usare come link.
    Ad es. (non la posso testare al momento)
    Codice PHP:
    function string2link($str,$utf8decode=false){
        
    $str = ($utf8decode) ? utf8_decode($str) : $str//a seconda del charset pagine/connessione db/db etc.

        
    $str trim($str);
        
    $str htmlentities($str);
        
    $str preg_replace'/&([a-zA-Z]+)(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);/',"\\1"$str); // è->e,à->a etc.
        
    $str preg_replace('/[^a-zA-Z0-9\-]/''-'$str);

        
    $str preg_replace('/-+/'"-"$str);
        
    $str trim('-',$str);
        return 
    $str;

    Da usare sia in fase di inserimento che in fase di verifica

  3. #3
    In ogni caso il rewrite va fatto con htaccess.

    Quindi oltre a rigenerare i vari link, poi dovrai scrivere una regola che li interpreti correttamente

  4. #4
    Ho corretto la tua funzione. L'unico errore era il trim finale. Bisognava invertire gli args. E ho modificato il primo preg_replace:

    Codice PHP:
    $str preg_replace('/[a-zA-Z]+\.php/','',$str); 

    Comunque con questa ottengo da:

    index.php?page=%pagename% a

    page-%pagename%

    Ora come riscrivo con .htaccess?

  5. #5
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    Avevo interpretato il tuo /pagine/%nomepagina% e index.php?page=$nomepagina% come un'astrazione del funzionamento

    Le regole di rewrite le devi scrivere in base a come poi sviluppi l'applicazione.
    Ad esempio:
    - titolo pagina "Neve in alta montagna" -> string2link() -> Neve-in-alta-montagna -> salvataggio nel db
    - .htaccess o ancora meglio file di configurazione del virtualhost
    codice:
    RewriteEngine On
    RewriteRule ^pagine/([^/]*) pagine.php?link=$1 [L]
    - url di esempio: http://www.miosito.it/pagine/Neve-in-alta-montagna
    - in pagina.php esegui il controllo sul valore di $_GET['link] ( = 'Neve-in-alta-montagna' ), la ripassi con string2link() ed esegui la query, se trovi un record esegui le operazioni, se non ne trovi gestisci l'errore.

    E ho modificato il primo preg_replace:
    il primo preg_replace sostituisce le entità html nelle lettere "normali" corrispondenti:
    è -> & egrave; -> e
    Come lo hai modificato non ti è utile nel caso specifico

    Ora come riscrivo con .htaccess?
    .htaccess non riscrive, serve a permettere la modifica di alcune configurazioni o opzioni laddove non sia possibile dare accesso al file di configurazione, come negli hosting condivisi.
    Nel caso sia abilitato mod_rewrite e siano configurate delle regole di rewrite, richiamato un url del tipo http://www.miosito.it/pagine/Neve-in-alta-montagna, se una delle regole restituisce un match, apache esegue le operazioni previste.
    Ma non ti trasforma in automatico gli url del tipo pagina.php?link=Neve-in-alta-montagna in friendly url, sei tu che richiami e scrivi nei link dei friendly url prevedendo uno schema per poter scrivere le regole di rewrite.
    Un po di manuale:
    http://httpd.apache.org/docs/current...d_rewrite.html
    http://httpd.apache.org/docs/2.2/rewrite/
    http://httpd.apache.org/docs/current...#allowoverride

  6. #6
    Originariamente inviato da Enoa
    Avevo interpretato il tuo /pagine/%nomepagina% e index.php?page=$nomepagina% come un'astrazione del funzionamento

    Le regole di rewrite le devi scrivere in base a come poi sviluppi l'applicazione.
    Ad esempio:
    - titolo pagina "Neve in alta montagna" -> string2link() -> Neve-in-alta-montagna -> salvataggio nel db
    - .htaccess o ancora meglio file di configurazione del virtualhost
    codice:
    RewriteEngine On
    RewriteRule ^pagine/([^/]*) pagine.php?link=$1 [L]
    - url di esempio: http://www.miosito.it/pagine/Neve-in-alta-montagna
    - in pagina.php esegui il controllo sul valore di $_GET['link] ( = 'Neve-in-alta-montagna' ), la ripassi con string2link() ed esegui la query, se trovi un record esegui le operazioni, se non ne trovi gestisci l'errore.
    Ah, non pensavo che si potesse scrivere una tale "riscrizione" col mod_rewrite. Grazie mille.

    il primo preg_replace sostituisce le entità html nelle lettere "normali" corrispondenti:
    è -> & egrave; -> e
    Come lo hai modificato non ti è utile nel caso specifico
    Si lascia stare. Non ho modificato nessun preg_replace. Ho semplicemente aggiunto quello che ti ho detto in modo da togliere la pagina index.php dall'url riscritta.

    .htaccess non riscrive, serve a permettere la modifica di alcune configurazioni o opzioni laddove non sia possibile dare accesso al file di configurazione, come negli hosting condivisi.
    Nel caso sia abilitato mod_rewrite e siano configurate delle regole di rewrite, richiamato un url del tipo http://www.miosito.it/pagine/Neve-in-alta-montagna, se una delle regole restituisce un match, apache esegue le operazioni previste.
    Ma non ti trasforma in automatico gli url del tipo pagina.php?link=Neve-in-alta-montagna in friendly url, sei tu che richiami e scrivi nei link dei friendly url prevedendo uno schema per poter scrivere le regole di rewrite.
    Un po di manuale:
    http://httpd.apache.org/docs/current...d_rewrite.html
    http://httpd.apache.org/docs/2.2/rewrite/
    http://httpd.apache.org/docs/current...#allowoverride
    Si praticamente è come un alias, no? Praticamente dico al server che l'url http://www.miosito.it/pagine/Neve-in-alta-montagna deve essere reindirizzata al contenuto sul filesystem identificato dall'indirizzo index.php? [etc..] no?

  7. #7
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    Originariamente inviato da tidusuper91
    Si praticamente è come un alias, no? Praticamente dico al server che l'url http://www.miosito.it/pagine/Neve-in-alta-montagna deve essere reindirizzata al contenuto sul filesystem identificato dall'indirizzo index.php? [etc..] no?
    Si, in pratica attraverso le espressioni regolari crei delle classi di URL astratti che "mappi" a risorse realmente presenti:
    http://www.miosito.it/pagine/Neve-in-alta-montagna -> RewriteRule ^pagine/([^/]*) pagine.php?link=$1
    http://www.miosito.it/articoli/Neve-in-alta-montagna -> RewriteRule ^articoli/([^/]*) articoli.php?link=$1
    http://www.miosito.it/articoli/Neve-in-alta-montagna -> RewriteRule ^([^/]*)/([^/]*) index.php?tipo=$1&link=$1 //tipo=articoli
    http://www.miosito.it/pagine/Neve-in-alta-montagna -> RewriteRule ^([^/]*)/([^/]*) index.php?tipo=$1&link=$1 //tipo=pagine

  8. #8
    Nonostante la riscrizione quindi il GET viene cmunque passato?
    E nella pagina con gli indirizzi giustamente devo mettere:

    Codice PHP:


    <ul class="address">[*][url="blabla[...]/articoli/neve-in-montagna"]Neve[/url][/list] 
    Con la riscrizione il get viene passato comunque no?

  9. #9
    A parte "riscrizione" che non si può sentire....

    Si, dopo la riscrittura degli URL la variabile GET viene passata ugualmente!

  10. #10
    In effetti è riscrittura. Maledetto me e l'italiano! Vi faccio sapere!!

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.