• User

    Mod rewrite per link sulla root

    Salve a tutti, sono nuovo del forum. Ho cercato in parecchi post ma non ho trovato una soluzione a un problema di RewriteRule con .htaccess.

    Vorrei trasformare 2 link dinamici del tipo:
    http://www.miosito.com/user.php?nome_utente=pippo
    http://www.miosito.com/articoli.php?titolo=il-mio-primo-articolo

    in 2 url del tipo:
    http://www.miosito.com/pippo
    http://www.miosito.com/il-mio-primo-articolo

    Non sono molto esperto di .htaccess, ma l'unica cosa che sono riuscito a fare è quello di aggiungere un livello/percorso all'inizio della regola ottenendo questi url (perfettamente funzionanti):

    http://www.miosito.com/**utenti/**pippo
    http://www.miosito.com/**articoli/**il-mio-primo-articolo

    Ho usato questo codice:

    *Options +FollowSymLinks
    RewriteEngine on

    RewriteRule ^utenti/(.)/ user.php?nome_utente_url=$1
    RewriteRule ^utenti/(.
    ) user.php?nome_utente_url=$1

    RewriteRule ^articoli/(.)/(.)-(.)/ articoli.php?ultimo_articolo_id=$2
    RewriteRule ^articoli/(.
    )/(.)-(.) articoli.php?ultimo_articolo_id=$2 *


    PROBLEMA: se io levo "utenti" e "articoli" all'inizio della regola e uso,

    • RewriteRule ^(.*)/ user.php?nome_utente_url=$1 *

    il link punta sempra alla prima regola scritta nell'.htaccess... e non riesco ad ottenere il link riscritto al livello di root del sito del tipo http://www.miosito.com/pippo.

    Credo sia un problema di mia incompetenza, poiché ho visto in giro link riscritti che puntano nella cartella principale.

    Anche in base a quanto ho letto su questo forum (vd. http://www.giorgiotave.it/forum/mod-rewrite/27151-aiuto-con-mod-rewrite.html#post203358 ) dove tra le altre cose interessanti, "masterx" consiglia di non allontanare inutilmente il link dalla radice con parole che non aggiungono molto, e nel mio caso mi ritrovo "utenti" e "articoli".

    Qualcuno sa indicarmi il codice corretto o dirmi dove sbaglio?
    Ho fatto numerosi tentativi di sintassi, aggiungendo flag, RewriteBase... ma non funzionano! :mmm:


  • User

    Chiedo scusa, mentre postavo ho cliccato 2 volte... come solo il peggiore degli utenti sa fare... in realtà il server GT mi aveva risposto picche.

    Ora ci sono 2 miei post identici, ma non so come fare ad eliminarli. Scusate.


  • Community Manager

    Vai tranquillo e non preoccuparti 🙂

    Speriamo che qualcuno ti aiuti, questo è importante per noi. Se poi hai cliccato due volte o che, non è un problema.


  • User Attivo

    @-007CasinoRoyal said:

    Salve a tutti, sono nuovo del forum. Ho cercato in parecchi post ma non ho trovato una soluzione a un problema di RewriteRule con .htaccess.

    Vorrei trasformare 2 link dinamici del tipo:
    http://www.miosito.com/user.php?nome_utente=pippo
    http://www.miosito.com/articoli.php?titolo=il-mio-primo-articolo

    in 2 url del tipo:
    http://www.miosito.com/pippo
    http://www.miosito.com/il-mio-primo-articolo

    Non sono molto esperto di .htaccess, ma l'unica cosa che sono riuscito a fare è quello di aggiungere un livello/percorso all'inizio della regola ottenendo questi url (perfettamente funzionanti):

    http://www.miosito.com/**utenti/**pippo
    http://www.miosito.com/**articoli/**il-mio-primo-articolo

    Ho usato questo codice:

    Options +FollowSymLinks
    RewriteEngine on

    RewriteRule ^utenti/(.)/ user.php?nome_utente_url=$1 *
    RewriteRule ^utenti/(.) user.php?nome_utente_url=$1 *

    RewriteRule ^articoli/(.)/(.)-(.)/ articoli.php?ultimo_articolo_id=$2 *
    RewriteRule ^articoli/(.)/(.)-(.) articoli.php?ultimo_articolo_id=$2 *


    PROBLEMA: se io levo "utenti" e "articoli" all'inizio della regola e uso,

    RewriteRule ^(.)/ user.php?nome_utente_url=$1 *

    il link punta sempra alla prima regola scritta nell'.htaccess... e non riesco ad ottenere il link riscritto al livello di root del sito del tipo http://www.miosito.com/pippo.

    Credo sia un problema di mia incompetenza, poiché ho visto in giro link riscritti che puntano nella cartella principale.

    Anche in base a quanto ho letto su questo forum (vd. http://www.giorgiotave.it/forum/mod-rewrite/27151-aiuto-con-mod-rewrite.html#post203358 ) dove tra le altre cose interessanti, "masterx" consiglia di non allontanare inutilmente il link dalla radice con parole che non aggiungono molto, e nel mio caso mi ritrovo "utenti" e "articoli".

    Qualcuno sa indicarmi il codice corretto o dirmi dove sbaglio?
    Ho fatto numerosi tentativi di sintassi, aggiungendo flag, RewriteBase... ma non funzionano! :mmm:

    Ad essere onesto, non ho capito nulla, puoi spiegare più semplicemente cosa vuoi ottenere, con più esempi di url rewrittata e relativa url reale?


  • User

    @eLLeGi said:

    Ad essere onesto, non ho capito nulla, puoi spiegare più semplicemente cosa vuoi ottenere, con più esempi di url rewrittata e relativa url reale?

    Allora, provo a spiegarmi meglio...

    Vorrei avere un url rewrittato del tipo
    *http://www.miosito.com/1-il-mio-primo-articolo

    *da questo url reale:
    http://www.miosito.com/articoli.php?id=1&titolo=il-mio-primo-articolo

    Invece riesco a far funzionare tutto solo se aggiungo un livello (una directory che ovviamente sul server non c'è) come ad esempio "articoli":

    *http://www.miosito.com/**articoli/**1-il-mio-primo-articolo

    *... utilizzando questo codice.

    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule ^articoli/(.)/(.)-(.)/ articoli.php?ultimo_articolo_id=$2
    RewriteRule ^articoli/(.
    )/(.)-(.) articoli.php?ultimo_articolo_id=$2

    RewriteRule ^utenti/(.)/ user.php?nome_utente_url=$1
    RewriteRule ^utenti/(.
    ) user.php?nome_utente_url=$1


    La terza e quarta regola si riferiscono al link per la pagina utenti, costruita secondo lo stesso prinicipio: anche per quella ho dovuto aggiungere la path utenti/ ed avere *http://www.miosito.com/**utenti/*pippo,
    mentre anche in questo caso non vorrei staccarmi dalla root (ed ottenere semplicemente http://www.miosito.com/pippo).

    Ripeto, non sono molto pratico di mod rewrite, ma la maggior parte dei tutorial che ho studiato riportano esempi di regole scritte così, ma non mi funzionano:
    RewriteRule ^(.)/ user.php?nome_utente_url=$1


  • User Attivo

    @-007CasinoRoyal said:

    Allora, provo a spiegarmi meglio...

    Vorrei avere un url rewrittato del tipo
    http://www.miosito.com/1-il-mio-primo-articolo

    da questo url reale:
    http://www.miosito.com/articoli.php?id=1&titolo=il-mio-primo-articolo

    Invece riesco a far funzionare tutto solo se aggiungo un livello (una directory che ovviamente sul server non c'è) come ad esempio "articoli":

    *http://www.miosito.com/**articoli/*1-il-mio-primo-articolo

    ... utilizzando questo codice.

    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule ^articoli/(.)/(.)-(.)/ articoli.php?ultimo_articolo_id=$2
    RewriteRule ^articoli/(.
    )/(.)-(.) articoli.php?ultimo_articolo_id=$2

    RewriteRule ^utenti/(.)/ user.php?nome_utente_url=$1
    RewriteRule ^utenti/(.
    ) user.php?nome_utente_url=$1


    La terza e quarta regola si riferiscono al link per la pagina utenti, costruita secondo lo stesso prinicipio: anche per quella ho dovuto aggiungere la path utenti/ ed avere *http://www.miosito.com/**utenti/*pippo,
    mentre anche in questo caso non vorrei staccarmi dalla root (ed ottenere semplicemente http://www.miosito.com/pippo).

    Ripeto, non sono molto pratico di mod rewrite, ma la maggior parte dei tutorial che ho studiato riportano esempi di regole scritte così, ma non mi funzionano:
    RewriteRule ^(.)/ user.php?nome_utente_url=$1 *

    Allora prima cosa, i due tipi di url (articoli e user) devono avere un pattern distinguibile altrimenti il rewrite engine non è in grado di capire come rewritare, quindi ad esempio l'url la fai iniziare per "art-1-titolo" o "user-1-nome".
    Quindi la sintassi tua è quasi corretta.
    Prova così.

    RewriteRule ^u-(.)-(.) articoli.php?ultimo_articolo_id=$1
    RewriteRule ^a-(.)-(.) user.php?nome_utente_url=$1

    Ora vai sull'indirizzo

    [URL="http://www.miosito.com/a-1-blalbla"]http://www.miosito.com/](http://www.miosito.com/)a-1-blalbla
    o
    **[URL="http://www.miosito.com/u-1-blalbla"]http://www.miosito.com/*u-1-blalbla](http://www.miosito.com/)

    e vedi se ti rigira sulla pagina corretta.
    **
    *


  • User

    @eLLeGi said:

    Prova così.
    RewriteRule ^u-(.)-(.) articoli.php?ultimo_articolo_id=$1
    RewriteRule ^a-(.)-(.) user.php?nome_utente_url=$1

    Grazie eLLeGI,
    ho provato e ovviamente funziona.

    @eLLeGi said:

    Allora prima cosa, i due tipi di url (articoli e user) devono avere un pattern distinguibile altrimenti il rewrite engine non è in grado di capire come rewritare, quindi ad esempio l'url la fai iniziare per "art-1-titolo" o "user-1-nome".

    La mancanza del pattern era il problema quindi.

    Io ho visto siti in giro che però non mi sembrano avere pattern (evito di postare links tanto immagino tu sappia meglio di me). Il link è costruito in mod rewrite, e manco si preoccupano di lavorare con un id.

    Il link è formato direttamente dal titolo del messaggio (con caratteri formattati ovvio, ma è lui):

    http://www.miotuosito.com/titolo-del-mio-articolo
    http://www.miotuosito.com/nome-utente-con-cui-mi-sono-registrato

    ecc...

    A questo punto mi vengono in mente altre due domande, di diverso approccio ma conseguenziali.

    ** La prima domanda:**
    Forse per quanto riguarda gli esempi che descrivo non stiamo parlando di .htaccess (con sotto php) ma di altre tecnologie?

    ** La seconda domanda:**
    Ammesso che la mia ostinazione abbia a questo punto un valore meramente tecnico, ha comunque senso in termini di una migliore indicizzazione possibile? Cioè, avere la pagina in una o due directory dalla root, piuttosto che sulla root stessa è penalizzante?

    Mi sono posto il problema pensando che il nome di una directory non sempre può corrispondere ed essere pertinente al contenuto reale delle pagine pubblicate in essa (nel mio caso una directory denominata "articoli/" non avrà mai attinenza con l'argomento dell'articolo... non è una sezione a tema specifico).

    Cito ad esempio http://www.giuseppeliguori.it (e approfitto per complimentarmi... ottimi contenuti)... e vedo che come mod_rewrite forse è usato il metodo path di php (perché, è su windows?).

    Questo già di per se obbliga l'inserimento di .../index.php/... a cui si aggiungono elementi della data ...2007/01/13... e finalmente il titolo dell'articolo seguito da .htm.

    Alla fine esce fuori un link (anche molto lungo sebbene un numero-data forse male non fa):
    http://www.miotuosito.com/index.php/2007/01/13/titolo-del-mio-articolo.htm

    La pagina htm, di fatto, si trova a 4 livelli di distanza della root... eppure il sito è ben indicizzato, posizionato... ecc... ecc... mentre io mi sto preoccupando di un livello "articoli/".

    Scusa/scusate se mi sono dilungato un po, ma in realtà il problema tecnico è molto legato all'aspetto SEO... magari devo postare da un altra parte per questo.


  • User Attivo

    @-007CasinoRoyal said:

    Io ho visto siti in giro che però non mi sembrano avere pattern (evito di postare links tanto immagino tu sappia meglio di me). Il link è costruito in mod rewrite, e manco si preoccupano di lavorare con un id.

    Si, ma tu puoi anche abolire l'id, ma in qualche modo la pagina php deve interpretare e distinguere due url che praticamente possono avere lo stesso formato ma significare due cose diverse (in un caso l'articolo, nell'altro l'id), quindi il pattern esiste sempre, ma viene gestito da codice.

    @-007CasinoRoyal said:

    La prima domanda:
    Forse per quanto riguarda gli esempi che descrivo non stiamo parlando di .htaccess (con sotto php) ma di altre tecnologie?

    Si appunto, sia htaccess che gestione dell'input tramite codice php.

    @-007CasinoRoyal said:

    La seconda domanda:
    Ammesso che la mia ostinazione abbia a questo punto un valore meramente tecnico, ha comunque senso in termini di una migliore indicizzazione possibile? Cioè, avere la pagina in una o due directory dalla root, piuttosto che sulla root stessa è penalizzante?

    Basta non eccedere, ma secondo me è davvero poco poco influente.

    @-007CasinoRoyal said:

    Cito ad esempio http://www.giuseppeliguori.it (e approfitto per complimentarmi... ottimi contenuti)... e vedo che come mod_rewrite forse è usato il metodo path di php (perché, è su windows?).

    Si, è su windows, potrei anche abolire index.php, ma mi scoccia usare componenti di terze parti per fare qualcosa che va bene lo stesso. I parametri non ci sono e già questo è sufficiente per far distinguere meglio le pagine.

    @-007CasinoRoyal said:

    La pagina htm, di fatto, si trova a 4 livelli di distanza della root... eppure il sito è ben indicizzato, posizionato... ecc... ecc... mentre io mi sto preoccupando di un livello "articoli/".

    Appunto, sul mio sito non mi sono preoccupato di nulla, non me ne frego delle categorie con i contenuti duplicati, non me ne frego delle url lunghe, giuro non faccio nulla di che, eppure per opera e virtù dei contenuti originali il sito si posiziona ugualmente.


  • User

    @eLLeGi said:

    Si, ma tu puoi anche abolire l'id, ma in qualche modo la pagina php deve interpretare e distinguere due url che praticamente possono avere lo stesso formato ma significare due cose diverse (in un caso l'articolo, nell'altro l'id), quindi il pattern esiste sempre, ma viene gestito da codice.

    Ho capito il concetto (forse, perché in teoria con PHP non ho problemi, ma ho fatto altre prove e continuo a sbagliare)... Quello che non so fare è creare e gestire il "pattern" via codice. Quello che so fare è passare con PHP le variabili che mi occorrono, la regola riscrive la url, e la pagina php le prende con metodo GET restituendo i risultati. Il "pattern" lo scrivo direttamente nell'.htaccess.

    Ho provato a passare "articoli/" come variabile per articoli.php e "utenti/" per user.php, ma ovviamente non risolvo aggiungendo variabili...

    Se hai modo di farmi un esempio, te ne sarei grato...

    in ogni caso:

    @eLLeGi said:

    Appunto, sul mio sito non mi sono preoccupato di nulla, non me ne frego delle categorie con i contenuti duplicati, non me ne frego delle url lunghe, giuro non faccio nulla di che, eppure per opera e virtù dei contenuti originali il sito si posiziona ugualmente.

    sono assolutamente daccordo! Ma poi ti trovi il cliente che ti chiede "mi fai un link come questo?" e ti fa un bell'esempio... e siccome Lui si che si è informato sulle regole SEO (bada bene, informato... e beato lui che gli basta così poco), vagli a spiegare che sarebbe il caso di creare qualche pagina in più oltre al Chi Siamo e ai Contatti...

    oops, scusate lo sfogo! E comunque grazie!