• User Newbie

    Problema colla riscrittura degli URL (mod_rewrite)

    Salve a tutti!

    Sto scrivendo un sito che fa grande uso della riscrittura degli url.

    In pratica nel mio .htaccess ho roba del tipo:
    RewriteRule ^[A-Za-z0-9_-]{3,24}/album/[0-9]{4,8}/[0-9]{1,3}$ album.inc.php?utente=$1&id=$2&p=$3

    Che mi regge URL del tipo
    /utente/album/14745/7
    album.inc.php?utente=utente&id=14745&p=7

    E questo funziona.
    Però, all'inzio dello stesso file .htaccess ho qualcosa di molto più semplice:

    RewriteRule ^registrati$ registrati.inc.php

    Ora, visitando l'indirizzo
    /registrati, quel che ottengo è un bel 404
    "The requested URL /registrati was not found on this server."

    Quindi come se cercasse il file /registrati che, appunto, non esiste.
    Mi ignora quella riga? O è strutturata male? Vi prego la cosa mi fa impazzire.

    Ah, e la stessa riga del tipo:
    RewriteRule ^login$ login.inc.php
    Invece funziona. Cioè mi da il 404, ma non trova "login.inc.php", quindi il mod_rewrite funziona. :mmm:

    Grazie in anticipo per le eventuali risposte :smile5:


  • Super User

    Ciao TuxSoul,
    occorrerebbe sapere se vi sono altre regole oltre le tre da te riportate.
    la regola del "registrati" è immediatamente successiva o precedente alla regola login?


  • User Newbie

    Salve a tutti, io ho più o meno lo stesso problema, la prima regola chiamata funziona, la successiva (che è identica) no!!

    il mio .htaccess è il seguente

    RewriteEngine on

    RewriteRule ^([0-9]+)-([^/]+).html$ lista_categorie.php?cta_codice_categoria=$1
    RewriteRule ^([0-9]+)-([^/]+).html$ sottocategorie.php?pippo=$1

    in verità la variabile "pippo" sarebbe sempre "cta_codice_categoria",

    Il mio dubbio è se non funziona perchè la seconda pagina chiamata "sottocategorie.php" avviene all'interno di lista_categorie.php

    Spero di essere stata abbastanza chiara è da due settimane che cerco di documentarmi sul rewriterule....

    Grazie in anticipo!!


  • Super User

    @jo17 said:

    Salve a tutti, io ho più o meno lo stesso problema, la prima regola chiamata funziona, la successiva (che è identica) no!!

    il mio .htaccess è il seguente

    RewriteEngine on

    RewriteRule ^([0-9]+)-([^/]+).html$ lista_categorie.php?cta_codice_categoria=$1
    RewriteRule ^([0-9]+)-([^/]+).html$ sottocategorie.php?pippo=$1

    E' la stessa regola e dunque non può riscrivere in due modi diversi.


  • User Newbie

    Si avevo avuto il sospetto.. però fondamentalmente deve fare la stessa cosa solo che chiama due pagine diverse... come si dovrebbe gestire dunque? Io ho anche provato togliendo la parte ([0-9]+) e passandogli solo una variabile...e suppongo che valga poco questa modifica perchè continuoa a darmi pagina non trovata..

    Ti ringrazio tantissimo per la risposta!!


  • Super User

    Metti un qualcosa nella regola che le distingue. Per esempio:

    
    RewriteEngine on
    
    RewriteRule ^([0-9]+)-codcat([^/]+)\.html$ lista_categorie.php?cta_codice_categoria=$1
    RewriteRule ^([0-9]+)-sottocat([^/]+)\.html$ sottocategorie.php?pippo=$1
    
    

  • User Newbie

    Uhmm... anche con queste modifiche mi da sempre errore 404 di pagina non trovata. Eppure dovrebbe essere così lineare!!


  • Super User

    Errore 404 vuol dire due cose:

    • Fa il redirect ma la pagina php non esiste
    • La pagina html è diversa da quella definita nelle regole

  • User Newbie

    Allora ho fatto un piccolo passo avanti... ho modificato htaccess in questo modo:

    RewriteEngine on
    RewriteRule ^([0-9]+)-codcat([^/]+).html$ lista_categorie.php?cta_codice_categoria=$1
    RewriteRule ([0-9]+)-B.html$ sottocategorie.php?pippo=$1
    in pratica ho tolto il simbolo ^ quando richiamo sottocategorie.php
    Ora è giunto un altro problema... viene passata sempre la prima variabile selezionata.
    Mi spiego meglio se alla prima chiamata di lista_categorie.php viene passata la variabile 01 anche quando richiamo sottocategorie.php passa sempre 01! Anche se sul link viene scritta la variabile giusta es miosito/SH01.html....


  • Super User

    Non ho capito bene. Puoi farmi un esempio?


  • User Newbie

    Ciao e grazie per la pasienza!

    Il tutto è strutturato in questo modo:
    dalla home page vado, tramite un menù generale, alle varie liste categorie, e qui faccio il primo revriterule, quindi ho il mio indirizzo convertito nel seguente modo:
    miosito/01-codcatIncubatrici.html
    dove 01 è il codice della categoria e incubatrici la descrizione

    All'interno di questa pagina c'è un elenco di sotto categorie e anche qui voglio la conversione dell'indirizzo, che fa correttamente in questo modo: miosito/H01-B.html dove H01 è il codice della sottocategoria da chiamare.
    Se faccio un echo della query presente in questa pagina mi accorgo che passa sempre e comunque la variabile 01!

    Naturalmente la variabile passata per la query in get è pippo...

    Da premettere che sono sul mio server in locale..
    Ti ringrazio ancora!


  • Super User

    Credo di aver capito. Prova così:

    
    RewriteEngine on
    RewriteRule ^([0-9]+)-codcat([^/]+)\.html$ lista_categorie.php?cta_codice_categoria=$1 
    RewriteRule ^(.*)-B.html$ sottocategorie.php?pippo=$1
    
    

    [0-9] vuol dire solo numeri.


  • User Newbie

    SIII!!! HAI RAGIONE!!!:yuppi:
    Giustamente gli dicevo di passare solo i numeri ed essendo una sottocategoria di 01, non capico che mi escludeva il carattere alfabetico!!!!
    Ti ringrazio tantissimo per l'aiuto e per la pasienza!!!!


  • Super User

    @jo17 said:

    SIII!!! HAI RAGIONE!!!:yuppi:
    Giustamente gli dicevo di passare solo i numeri ed essendo una sottocategoria di 01, non capico che mi escludeva il carattere alfabetico!!!!
    Ti ringrazio tantissimo per l'aiuto e per la pasienza!!!!

    Figurati. A volte chi non risponde o non risponde in modo tale da risolvere il problema dipende solo dal fatto di non capire la reale esigenza o il problema.