Visualizzazione risultati 1 fino 21 di 21

Discussione: Mod_Rewrite: Modificare indirizzi per cartella

  1. #1
    Guest

    Predefinito Mod_Rewrite: Modificare indirizzi per cartella

    Ho cercato sia sul forum che in google, ma non ne ho cavato piede, osno già un'oretta che provo a far che quando viene visualizzata la cartella /nome_cartella/ venga invece restituito /nome_cartella

    Questo è l' .htaccess che sto utilizzando:

    Codice:
    # # av:PHP-RG
    php_flag register_globals off
    
    # av:RR-php5
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/php5/
    RewriteRule ^(.*)$  /php5/$1
    # RR-php5
    
    RewriteRule ^ecliptica/$ /ecliptica [L]
    RewriteRule ^winterheart_s_guild/$ /Winterheart's_Guild [L]
    Sapreste spiegarmi come fare gentilmente? Perchè dovrei fare le stesse cosè per i file, esempio, se nella cartella /winterheart_s_guild/ cè un file di nome the_misery.html vorrei trasformare l' url in /Winterheart's_Guild/The_Misery

  2. #2
    Guest

    Predefinito

    Cambio metodo, quando ho postato avevo le pagine statiche, ora che le ho dinamice:

    index.php?album=18&testo=1

    Come posso fare in modo che:

    index.php?album=18 diventi /Titolo_Album
    &testo=1 diventi /Titolo_canzone
    index.php?album=18&testo=1 diventi /Ttoloto_album/Titolo_canzone?

    Grazie in anticipo!

  3. #3
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,230

    Predefinito

    jcdesign per fare ciò che vuoi nel post #1 ti ho aiutato chiedendo (perchè serve anche a me) se si può fare ciò che ho scritto qui => http://forum.it.altervista.org/basi-...-htaccess.html
    Apprezzi l'aiuto? Offrimi un caffè!

  4. #4
    Guest

    Predefinito

    ma come scritto nel #1 non ho più bisogno della prima richiesta perchè non ho più pagine statiche, lo stavo creando così prima il sito. Ora sono dinamiche w mi servirebbe per le dinamiche

  5. #5
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,230

    Predefinito

    Citazione Originalmente inviato da jcdesign Visualizza messaggio
    Cambio metodo, quando ho postato avevo le pagine statiche, ora che le ho dinamice:

    index.php?album=18&testo=1

    Come posso fare in modo che:

    index.php?album=18 diventi /Titolo_Album
    &testo=1 diventi /Titolo_canzone
    index.php?album=18&testo=1 diventi /Ttoloto_album/Titolo_canzone?

    Grazie in anticipo!
    Più o meno temporaneamente potresti fare così:
    Codice PHP:
    RewriteEngine On
    RewriteRule
    ^([^/]*)-^([^/]*)/^([^/]*)-^([^/]*)\.html$ /index.php?album=$1&testo=$3&alvento=$2&inutile=$4 [L]
    Però i collegamenti devono essere fatti in questo modo:
    (Indirizzo B =>)/18-Titolo_album/1-Titolo_Canzone.html
    Perchè praticamente il codice che ti ho postato associa all'indirizzo B alcuni valori dell'indirizzo originale.
    Praticamente (forse non so spiegarti bene) il numero compreso tra il primo slash e il titolo dell'album sarebbe index.php?album=18 mentre il secondo numero quello tra il secondo slash e il titolo della canzone sarebbe la seconda variabile GET inviata all'indirizzo originale &testo=1.
    Se non vuoi fare una cosa così pasticciata dovresti fare un codice php che associa ad un nome il numero dell'album ed al nome della canzone il numero del testo.
    Spero di averti fatto capire e di esserti stato utile.
    Apprezzi l'aiuto? Offrimi un caffè!

  6. #6
    Guest

    Predefinito

    E se al posto di utilizzare nei case i numeri ( "1", "2" ecc ecc) uso i titoli degli album? Stessa cos aper i testi, al posto di usare numeri scrivo il titolo? Dovrebbe essere più semplice così il rewrite!

    Forse è meglio anche eprchè non ci ho capito molto da quello che hai scritto

  7. #7
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,230

    Predefinito

    Per spiegarmi meglio ogni ^([^/]*) corrisponde ad una variabile + numero $n (dove n e il numero) quindi essendoci 4 ^([^/]*) avremo 4 variabili.
    I collegamenti tocca farli a te in questo modo:

    /$1-Titolo_Album/$3-Canzone_album/ dove $1 è l'ID che verrà estratto da index.php?album$1 e dove $3 è il dato che verrà estratto da &testo=$3. Non so come spiegarti ma praticamente il mod_rewrite funziona cosi, ogni nome numero o altro corrisponde ad una variabile che verrà inviato al file originale.

    Nonostante tutto ciò che ti ho detto penso di non essermi fatto capire quindi ti linko questo sito che genera il codice che ti può servire.
    Apprezzi l'aiuto? Offrimi un caffè!

  8. #8
    Guest

    Predefinito

    minki grazie mille, lo sapevo come funzionava, non avevo però ben capito quello che intendevi! Llroa, facendo come dicevo io, di sostiuire i case con il nome dell' ablum avro questo risultato:

    album/winterheart_s_guild.html

    con questo codice:
    Codice:
    RewriteRule ^album/([^/]*)\.html$ /index.php?album=$1 [L]
    Grazie del link, lo avevo perduto e non sapevo come ricercarlo Grazie ancora ;)

    EDIT: Cavolo, non funziona!!

    Se scrivo così nell' .htaccess:
    Codice:
    RewriteRule ^/([^/]*)$ /index.php?album=$1 [L]
    E vado per esempio all'inidirizzo /index.php?album=Winterheart's_Guild l' URI si vede sempre così non me lo cambia con il nome! Dovrebbe diventare:

    /Winterheart's_Guild

    Ultima modifica di debug : 05-06-2008 alle ore 00.38.28

  9. #9
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,230

    Predefinito

    Quel codice non crea un redirect, questo lo dovresti fare tu semmai.
    Quel codice rende accessibile anche /Winterheart's_Guild che non esiste. Cioè tu se digiti /Winterheart's_Guild o /index.php?album=Winterheart's_Guild è la stessa cosa.
    Apprezzi l'aiuto? Offrimi un caffè!

  10. #10
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    @miki92: per favore, smettila di suggerire espressioni regolari quando non le sai usare e soprattutto non le hai provate prima


    Codice PHP:
    RewriteEngine On
    RewriteRule
    ^([^/]*)-^([^/]*)/^([^/]*)-^([^/]*).html$ /index.php?album=$1&testo=$3&alvento=$2&inutile=$4 [L]
    questa regola è sbagliata, perché Miki92 non è ancora arrivato a metà della prima pagina della guida delle espressioni regolari, dove spiegano che " ^ " corrisponde all'inizio della riga/stringa/url (mentre $ ne rappresenta la fine). La regola cerca quindi 4 inizii dell'url, e non li troverà mai. Anzi, probabile che il server ti dia errore, e ti rinomini l'.htaccess in .txt. La versione breve postata sopra da JC invece funziona, perché ^ appare una sola volta. *


    Codice PHP:
    RewriteEngine On
    RewriteBase
    /
    RewriteRule ^([^/]+)-([^/]+)/([^/]+)-([^/]+).html$ /index.php?album=$1&testo=$3 [L]
    Questa, inserita nell'.htaccess alla radice del sito, traduce tutti gli indirizzi del tipo tuosito/a-b/c-d.html in tuosito/index.php?album=a&testo=c .

    Queste regole sono però regole di traduzione, che non nascondono gli indirizzi esistenti. Se non vuoi che la gente usi i link /index.php?qualcosa, beh, non li inserire nel sito e non appariranno da nessuna parte - usa solo quelli /album/testo.html


    [*]NB: ^ all'interno delle parentesi quadre ha invece significato di non-quello-che-segue
    Ultima modifica di dreadnaut : 08-06-2008 alle ore 13.21.03

  11. #11
    Guest

    Predefinito

    Beh, non ci ho capito molto, perchè hai usato una reogla che non ho mai visto

    Allora, io scrivendo così (ho il rewrite php5 quindi RewriteEngine on non dovrei più scriverlo giusto?) :

    Codice PHP:
    RewriteBase /
    RewriteRule ^([^/]+)/([^/]+).html$ /index.php?album=$1&testo=$2 [L]
    Non dovrebbe diventare così:
    Codice PHP:
    miosito.altervista.org/$1/$2.html
    ???

    L' URI originale è: index.php?album=Winterheart's_Guild&testo=The_Misery

    non dovrebbe diventare miosito.altervista.org/Winterheart's_Guild/The_Misery.html


  12. #12
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    ho solo tolto i caratteri ^ di troppo, e sostituito gli " * " (che indicano sequenze di qualsiasi lunghezza) con dei " + " (che indicano sequenza di qualsiasi lunghezza non vuote).

    Le regole sono scritte in senso opposto, rispetto a quanto mi sembra tu stia scrivendo. L'espressione regolare viene prima confrontata con ciò che l'utente scrive nella barra degli indirizzi del suo browser, e se la regola ha successo, allora viene tradotta come indicato dalla seconda parte della riga, e rediretta internamente (senza che l'utente lo veda).

    Con l'ultima regola da te scritta, qualsiasi link /qualcosa/qualcos'altro.html viene internamente reindirizzato alla pagina index.php, con gli appositi parametri. Occhio che questo viene applicato a tutti i link con quella forma - magari ti conviene creare una sottodirectory, e mettere la regola solo per essa, così da poter ancora avere pagine html da altre parti.

    RewriteEngine On lascialo, a meno che non ci sia già più in alto nel file.
    Ultima modifica di dreadnaut : 08-06-2008 alle ore 15.47.10

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio

    RewriteEngine On lascialo, a meno che non ci sia già più in alto nel file.
    C'è già come gia scritto prima perchè ho nascosto /php5/ quindi è già scritto, comunque il sito avrà tutta quella sintassi li, non avrà altre pagine, è una smeplice raccolta di testi, per quello mi interesserebbe fare come ho detto, quindi sbaglio a scrivere il codice giusto???

  14. #14
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Citazione Originalmente inviato da jcdesign Visualizza messaggio
    quindi sbaglio a scrivere il codice giusto???
    l'ultima regola andava bene, però io ad una domanda del genere non so proprio cosa rispondere sei contorto dentro, si vede

  15. #15
    Guest

    Predefinito

    lo so sno molto incasinato scrivendo e non capisco molto velocemente nonstante leggo le guide! Cioè, le guide in internet non ci osno per quello che volgio io, io vorrei fare come fa Wikipedia, ogni articolo viene trasformato in /wiki/Articolo e vorrei fare la stessa cosa pure io e mettendo quel codice non me lo fa, mi lascia sempre o l'inidirizzo normale oppure mi da errore 500!!

  16. #16
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    una stessa regola non può a volte darti l'indirizzo normale, a volte darti errore 500, quindi di nuovo stai scrivendo cose confusionarie.

    Se hai queste righe nell' .htaccess nella directory principale del tuo sito
    Codice PHP:
    RewriteEngine On
    RewriteBase
    /
    RewriteRule ^([^/]+)/([^/]+).html$ /index.php?album=$1&testo=$2 [L]
    e dal tuo browser visiti tuosito.altervista.org/sciatalgia/rurale.html, il server richiama la pagina index.php?album=sciatalgia&testo=rurale. Punto.

    Se vuoi ottenere un'altra cosa, allora spiegati con calma, con degli esempi.

    Nota che wikipedia non nasconde le pagine normali, infatti puoi accedere ad esse anche così: http://it.wikipedia.org/w/index.php?title=Prova

  17. #17
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    una stessa regola non può a volte darti l'indirizzo normale, a volte darti errore 500, quindi di nuovo stai scrivendo cose confusionarie.
    Se hai queste righe nell' .htaccess nella directory principale del tuo sito
    Codice PHP:
    RewriteEngine On
    RewriteBase
    /
    RewriteRule ^([^/]+)/([^/]+).html$ /index.php?album=$1&testo=$2 [L]
    e dal tuo browser visiti tuosito.altervista.org/sciatalgia/rurale.html, il server richiama la pagina index.php?album=sciatalgia&testo=rurale. Punto.
    Hai ragione, mi sono dimenticato di finire la frase, intendevo, che scrivendo prima una regola, non mi cambiava niente, mentre cambiandola mi dava errore 500

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Se hai queste righe nell' .htaccess nella directory principale del tuo sito
    Codice PHP:
    RewriteEngine On
    RewriteBase
    /
    RewriteRule ^([^/]+)/([^/]+).html$ /index.php?album=$1&testo=$2 [L]
    e dal tuo browser visiti tuosito.altervista.org/sciatalgia/rurale.html, il server richiama la pagina index.php?album=sciatalgia&testo=rurale. Punto. Se vuoi ottenere un'altra cosa, allora spiegati con calma, con degli esempi.
    ho messo questo codice ed è perfetto, fa proprio al caso mio! Grazie mille, ora però per finire definitivamente devo fare così, devo riuscire a far che anche SOLAMENTE l'album venga trasformato perchè scrivendo il codice così:
    Codice PHP:
    RewriteEngine On
    RewriteBase
    /
    RewriteRule ^([^/]+)/([^/]+)$ /index.php?album=$1&testo=$2
    RewriteRule
    ^([^/]+)$ /index.php?album=$1 [L]
    Mi restituisce 500 Internal Server Error Perchè

  18. #18
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    perché l'espressione ^([^/]+)$ corrisponde a "qualsiasi sequenza non vuota e senza /", che può essere qualsiasi pagina! mod_rewrite finisce quindi in un ciclo infinito di trasformazioni, che non porta da nessuna parte. Per quello prima suggerivo una sottocartella

    In alternativa, puoi usare ^([^/]+)\.html$ che ti permette di evitare la riscrittura infinita, perché pagine .php o immagini o directory non vengono rinominate.

  19. #19
    Guest

    Predefinito

    non capisco perchè mettendo così funziona perfettamente:
    Codice PHP:
    RewriteEngine On
    RewriteBase
    /
    RewriteRule ^([^/]*)\.html$ /index.php?album=$1
    RewriteRule
    ^([^/]+)/([^/]+)\.html$ /index.php?album=$1&testo=$2 [L]
    mentre se metto:
    Codice PHP:
    RewriteEngine On
    RewriteBase
    /
    RewriteRule ^([^/]*)$ /index.php?album=$1
    RewriteRule
    ^([^/]+)/([^/]+)\.html$ /index.php?album=$1&testo=$2 [L]
    Non funziona

  20. #20
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    non te l'ho spiegato sopra ?

    la prima regola nel secondo esempio tuo può essere applicata ad ogni pagina, perché se viene effettuata una traduzione, mod_rewrite riparte dall'inizio del file ad applicare le regole. Quindi applica la prima, traduce, riparte, applica la prima, traduce, riparte, etc... ciclo infinito = errore 500

    La regola con in fondo .html viene applicata solo a richieste che terminano in .html. Quando ne arriva una, mod_rewrite applica la prima regola, traduce in index.php/etc, riparte dall'inizio, ma questa volta la regola non si applica più, perché la richiesta è diventata index.php, invece di qualcosa.html, e non c'è un ciclo infinito.


    Un'altra buona ragione per cui la prima funziona è che te l'ho detta io, e questo magicamente basta
    Ultima modifica di dreadnaut : 08-06-2008 alle ore 21.01.18

  21. #21
    Guest

    Predefinito

    Allora, ho risolto utilizzando questo codice qui:
    Codice PHP:
    RewriteEngine On
    RewriteBase
    /
    RewriteRule ^album/([^/]*)$ /index.php?album=$1
    RewriteRule
    ^album/([^/]+)/testo/([^/]+)$ /index.php?album=$1&testo=$2 [L]
    in questo modo (esempio):
    • /index.php?album=Winterheart's_Guild&testo=The_Misery


    viene trasformato in:
    • /album/Winterheart's_Guild/testo/The_Misery


    Grazie mille a tutti e due e scusate della mia testardaggine ma sono fatto così

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •