Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617

    Come fare un rewrite url!

    Salve a tutti,
    chiaramente ho letto pacchi e pacchi di pagine web riferite all'argomento ma non riesco a venire a capo della cosa.

    Stò facendo un po' di prove per capire come funziona il mod_rewrite e comprendere al melgio come funziona la riscrittura delle url.

    A tal proposito ho creato una cartella test sul mio server e ho caricato un file php praticamente vuoto.

    Vorrei che questa url: http://miodominio.it/test/prodotti.php?codice=54

    venga riscritta in http://miodominio.it/test/prodotti-54

    In teoria dovrebbe essere una cosa semplice per cui ho inserito nella cartella test il file .htaccess e dentro ho scritto quanto segue:

    RewriteEngine On
    RewriteRule ^prodotto-([0-9]+)/$ prodotti.php?codice=$1

    Per tirarla giù facile..... non succede nulla, la url la vedo sempre con la variabile, per dire nemmeno un errore 500 o roba simile.

    In cosa sbaglio?

    Grazie in anticipo !

  2. #2
    Ciao, anche io sto affrontando la questione e sono agli inizi come te.
    Non capisco cosa intendi per 'non succede nulla' perché credo che o funziona oppure no.
    Se digiti il nuovo indirizzo http://miodominio.it/test/prodotti-54 cosa succede? Appare la pagina che vuoi o no?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    Ciao scusa il ritardo,
    in pratica non avevo capito un piffero. avevo invertito il concetto, io scrivevo la url con la variabile e pertendevo che uscisse la url friendly. eheheh non avevo capito una mazza.

    Ora mi trovo davanti un'altro problemuccio. Se faccio cliccare una url così: dominio.it/test-di-prova

    Come faccio a dire nell'htaccess che la url da richiamare è tipo dominio.it?articoli.php?id=54?

    Questo tenendo ben presente che non ho l'id nella url, un po' come fanno i cms più comuni diciamo.

    Grazie in anticipo!

  4. #4
    Le domande che mi facevo io giorni fa. Si, l'approccio inverso anche a me ha aiutato a capire meglio.


    Credo non si possa ottenere il risultato che anche io cercavo se appendi (solo) l'id numerico alla query.
    Servono forse altri dati in formato stringa. Puoi passarlo l'id numerico perché almeno un parametro univoco è necessario perché il risultato della query fornisca un solo risultato possibile e non ci siano dubbi sulla pagina richiesta.
    Ma non so se poi si possa evitare di riportarlo nell'url riscritto tipo /articoli-di-prova-1254/.


    Io ho modificato la mia pagina e la query perchè funzionino con url come articoli.php?categoria=qualunque-str1nga-esclusi-slash.
    A quel punto istruisci apache che se viene cercata la pagina in www.tuosito.it/qualunque-str1nga-esclusi-slash/ deve rispondere con la pagina articoli.php?categoria=qualunque-str1nga-esclusi-slash.

    Ecco la mia regola ora
    # la mia regola 1
    RewriteRule ^([^/]+)/$ articoli.php?categoria=$1

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    più o meno ho risolto nello stesso modo ma francamente ora mi trovo in un loop dal quale non riesco ad uscire.

    In pratica ho una pagina dominio.it/categoria/ e un'altra pagina dominio.it/categoria/titolo-articolo .
    Per la seconda pagina ho scritto la regola simile a quella di prima: RewriteRule ^categoria/(.*)$ /articoli.php?title=$1 [QSA,L]
    Ora però il problema è che devo ottenere anche una url
    dominio.it/categoria/ senza niente dopo, che punta ad un'altro file e francametne non so come dirgli questa cosa ignorando la regola precedente.

    Non è che hai qualche idea?

    Grazie in anticipo!

  6. #6
    Non capisco il tuo scenario. Dici:

    In pratica ho una pagina dominio.it/categoria/ e un'altra pagina dominio.it/categoria/titolo-articolo .
    ma quelli indicati sono URL non pagine. Non so giudicare i flag della tua regola, a mala pena capisco la mia!
    Ma mi pare strano trovarci scritto dentro 'categoria' perchè la categoria (nel mio caso) sarà sempre diversa sulla base del nome nel db (deve essere univoco nella tabella se non vuoi l'id numerico nell'url).

    Le mie pagine documenti.php?nome=anelli o documenti.php?nome=bracciali conterranno i link ai singoli articoli e saranno richiedibili, dopo la riscrittura, agli indirizzi sito.it/bracciali o sito.it/anelli (che il browser intenderà come sito.it/bracciali/ o sito.it/anelli/ tale da supporci dentro index.html o index.php o default.asp restituito in base alla directory apache... credo.).

    Dentro documenti.php il while che crea i links attibuisce loro nomecategoria/idnumerico-e-nome-articolo.html come url

    così avrò la pagina scheda_documento.php?cat=anelli&idarticolo=115&nom e=splendido-uno
    che sarà richiamabile anche con sito.it/anelli/115-splendido-uno.html grazie alle istruzioni nel while
    Ultima modifica di SuperdadoAr; 30-11-2016 a 17:00

  7. #7
    Correggo alcuni dettagli perché alla fine ho trovato una soluzione che ritengo più esteticamente gradevole oltre che forse più 'amichevole'.
    In questo mio primo caso concreto, le mie categorie sono tanto poche da avere un nome univoco nel db da usare come parametro per riscrittura/query.
    Però per l'articolo oltre al nome passo anche l'id numerico per non complicarmi troppo la vita nella gestione del mio cms.

    Dimenticare quindi le ultime due righe del mio messaggio precedente perché ho adottato (e testato con successo in locale) una differente struttura degli url.
    Così avrò la pagina scheda_documento.php?cat=anelli&nome=splendido-uno&idarticolo=115
    che sarà richiamabile anche con sito.it/anelli/115/splendido-uno/ grazie alle istruzioni nel while che generano il link

    Codice PHP:
    $prodotto $ris['ID_Testo']."/".strtolower(pulisciStringa($ris['Titolo']))."/"
    Un bel
    Codice PHP:
     echo $_SERVER['QUERY_STRING']; 
    nelle pagine interessate aiuta sempre, specie se parti provando che l'impianto funzioni a dovere senza riscrittura.

    Le mie regole .htaccess (funzionanti, non so quanto corrette) sono

    codice:
    RewriteRule ^([^/]+)/$ documenti.php?nome=$1
    RewriteRule ^([^/]+)/([0-9]+)/([^/]+)/$ scheda_documento.php?cat=$1&id=$2&nome=$3
    Si tratta di pagine di un sito esistente di cui voglio migliorare e non peggiorare la visibilit� e siccome google conosce i due script php ma con appesi differenti parametri (medesimo db in questo caso semplice di adattamento) ho anche pensato di preparare una verifica iniziale ad opera di php che se vede appendere una vecchia variabile per prima cosa verifica che esista ancora la pagina creata ed eventualmente restituisce un 301 con l'indirizzo nuovo oppure reindirizza alla homepage.
    codice:
    <?// Se arriva ?id=num per una vecchia pagina
    if($_GET['id']){
    // lo cerco nel db.
    $rediStr="SELECT * FROM categoria WHERE ID_Cat='{$_GET['id']}'";
    $rediQ=mysqli_query($connessione,$rediStr);
    // Se esiste 
    if($rediQ) {
    // riscrivo l'indirizzo nella nuova forma
    $rediRis=mysqli_fetch_array($rediQ);
    echo $rediRis['Nome'];
    $location="Location: http://miosito/".strtolower($rediRis['Nome'])."/";
    } else { //se l'id arrivato non è nel db
    // imposto la root come location
    $location="Location: http://miosito/";
    } //fine if $rediQ
    // Infine reindirizzo permanenentemente alla nuova location
    Header( "HTTP/1.1 301 Moved Permanently" ); 
    Header( "$location" ); 
    //echo "<h3>$location</h3>";
    } // fine if get id

    Ancora non ho pensato nel dettaglio agli scenari di possibile cambio di id o nomi nel db solo qualche idea vaga. Casomai aggiorno
    Ultima modifica di SuperdadoAr; 30-11-2016 a 20:01

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    Più andiamo avanti più mi pare che mi manchino proprio le basi sull'argomento.

    Ti spiego il mio scenario o almeno ci provo.
    ho una pagina dominio.it/categoria_1.php che vorrei fosse riscritta in dominio.it/categoria-1/ .
    Poi, in certi casi la pagina viene caricata con delle variabili get che permettono di mostrare risultati di ricerca, quindi vorrei che uscisse dominio.it/categoria-1/?search=valore_cercato
    Poi però qualcuno può cliccare su un risultato e andare in un'articolo che fa parte di quella categoria e mi piacerebbe che uscisse domini.it/categoria-1/titolo-dell-articolo. In questa ultima fase il file che verrebbe richiamato è dominio.it/articoli.php?title=seo-title&id_post=xxx .

    Ora mi domando, perchè mi parli di while e cicli? le query cosa c'entrano esattamente con l'htaccess e il mod rewrite? Sendo che mi sono perso qualche cosa.
    Credo ci sia qualche cosa che non so...

    Grazie in anticipo!

    Aggiungo che non mi è ancora chiaro come funzioni invece la situazione inversa. Ecco un esempio semplice:

    RewriteRule^([0-9]+)/$ prodotti.php?id=$1

    Se questa regola semplice, vado a questa url ->
    http://localhost/test/htaccess/50/

    e mi chiama la pagina prodotti.php?id=50 ok.

    Ma se poi vado a questa url http://localhost/test/htaccess/prodotti.php?id=50 direttamente

    La url resta così come l'ho scritta, non viene riscritta per nulla.
    Lumi su questa cosa ne hai? io non trovo neppure grandi info in giro solo le solite cose trite e ritrite ma nessuno che spieghi unpo' di scenari complessi.
    Grazie
    Ultima modifica di Madsex; 01-12-2016 a 01:33 Motivo: Aggiunta

  9. #9
    Lo scopo, in questo caso, è di usare le possibilità della riscrittura per migliorare un sito dinamico basato su database ottenendo nomi gradevoli a persone e motori invece che
    ?id=qualcosa&nome=titolo
    Il db, ridotto all'osso è

    codice:
    categoria
    --------------
    id_cat
    nome_cat
    
    
    articoli
    --------------
    id_articolo
    id_cat
    titolo
    testo
    Le tue pagine categoria.php e articoli.php equivalgono alle mie documenti.php e scheda_documento.php.
    Ora non pensare alla riscrittura e torna dopo ai cicli.

    Io suppongo che nel tuo sito già funzionante ci sia un menu di navigazione delle categorie presenti nel db. Non puoi che popolare il menu con un ciclo while sulle categorie database per tirarne fuori quantità, nomi e id e creare e valorizzare i 'pulsanti' con i giusti parametri.

    codice:
    <a href="categoria.php?id=<?=$riga['id_cat'];?>"><?=$riga['nome_cat'];?></a>
    La tua pagina categoria.php infatti, il passo successivo, attende almeno un parametro da usare per la condizione WHERE della query (
    codice:
    SELECT * FROM articoli WHERE id_cat='15'
    ).
    La pagina verrà popolata da un ciclo con i titoli degli articoli associati alla categoria e valorizzerai ogni link con l'id dell'articolo.

    codice:
    <a href='articoli.php?id=<?=$riga['id_articolo']}'><? echo $riga['titolo'];?></a>

    Se un link viene cliccato, lo script articoli.php attenderà almeno l'id di quello specifico articolo per mostrarne l'intero contenuto.
    Con htaccess e php puoi sostituire querystring e strutture dinamiche complesse con gradevoli indirizzi apparentemente statici.
    I pulsanti menu,
    codice:
    <a href ="categoria.php?id_cat=1">Apache</a>
    <a href ="categoria.php?id_cat=2">SEO</a>
    usando opportunamente campi testuali invece che numerici, consentono ai tuoi link di menu di diventare
    codice:
    <a href ="categoria.php?nome_cat=apache">Apache</a>
    <a href ="categoria.php?nome_cat=seo">SEO</a>
    e infine
    codice:
    <a href ="apache/"></a>
    <a href ="seo/"></a>

    I link agli articoli
    invece di
    codice:
    <a href="articoli.php?id=15">rewrite</a>
    <a href="articoli.php?id=16">htaccess</a>
    passano a
    codice:
    <a href="articoli.php?id=15&nome_cat=apache">rewrite</a>
    <a href="articoli.php?id=16&nome_cat=apache">htaccess</a>
    per diventare richiamabili anche con
    codice:
    <a href="apache/15/rewrite.html">rewrite</a>
    <a href="apache/16/htaccess.html">htaccess</a>
    Devo ammettere che se ancora scrivi
    Ma se poi vado a questa url http://localhost/test/htaccess/prodotti.php?id=50 direttamente
    La url resta così come l'ho scritta, non viene riscritta per nulla.
    non ti stai avvicinando..
    Ultima modifica di SuperdadoAr; 01-12-2016 a 12:22

  10. #10
    Devo correggere

    Le mie regole .htaccess (funzionanti, non so quanto corrette) non sono


    codice:
    RewriteRule^([^/]+)/$ documenti.php?nome=$1
    RewriteRule^([^/]+)/([0-9]+)/([^/]+)/$ scheda_documento.php?cat=$1&id=$2&nome=$3


    ma

    codice:
    RewriteRule^([^/]+)/$ documenti.php?nome=$1
    RewriteRule^([^/]+)/([0-9]+)/([^/]+)/$ scheda_documento.php?cat=$1&idarticolo=$2&nome=$3

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.