• User

    Url rewrite con apache che gira sotto windows

    salve sto facendo alcune prove stupidissime con il mod_rewrite su apache che gira sotto windows...

    allora la struttura del sito dove sto facendo le prove è la seguente
    http://localhost/imm/scheda_articolo.php?ida=2

    il file htaccess l'ho messo nella directory http://localhost/imm/

    e il file è molto semplice
    RewriteEngine on
    RewriteRule ^titolo_articolo.html scheda_articolo.php?ida=$1&%{QUERY_STRING}

    mi bastava fare una prova
    però non mi cambia il nome sulla barra degli indirizzi (ma la pagina funziona correttamente)
    avviso che il mod_rewrite è attivo tra i vari moduli (l'ho verificato eseguendo phpinfo())


  • User Attivo

    Ciao gustoinrete,
    non credo di aver capito correttamente il tuo problema...

    però non mi cambia il nome sulla barra degli indirizzi (ma la pagina funziona correttamente)

    il mod_rewrite è uno strumento che non cambia ciò che è scritto sulla barra degli indirizzi ma che ti consente di raggiungere una determinata url, anche digitandone un'altra. Nell'esempio fatto da te, puoi raggiungere la pagina **scheda_articolo.php?ida... **anche digitando semplicemente titolo_articolo.html.

    Normalmente viene utilizzato per far digeririe meglio le URL ai motori di ricerca, se hai una url del tipo:
    pippo.php?id=13
    potresti riscriverla come:
    13-topolino.htm
    con una semplice regola mod_rewrite del tipo:
    RewriteRule ^([0-9]+)-topolino.html pippo.php?ida=$1

    Se invece quello che ti occorre è far si che dopo aver digitato pippo.htm?id=13 il browser ti rimandi in automatico alla pagina topolino.htm quello che ti serve è un semplice redirect.

    Spero di esserti stato d'aiuto.
    :ciauz:


  • User

    ti ringrazio per la risposta e per l'ottima delucidazione (necessaria direi visto che non ci avevo capito un granchè 🙂 )

    ma provando ad accedere alla pagina
    http:// localhost/imm/titolo_articolo.html
    mi dice pagina web non trovata

    cosa devo settare per far si che funzioni ?
    considera che lanciando la phpinfo() il modulo mod_rewrite è tra quelli caricati


  • User Attivo

    Verifica che il file httpd.conf (generalmente nella cartella *...\apache\conf*), abbia la direttiva:
    AccessFileName .htaccess
    e che AllowOverride sia impostato su All piuttosto che su None.

    Facci sapere...;)


  • User

    allora ***AccessFileName .htaccess ***c'è

    per quanto riguarda il secondo consiglio nel file httpd.conf ho trovato diverse occorrenze ***AllowOverride ***
    il primo era impostato a None e l'ho modificato seguendo le tue indicazioni
    <Directory />
    Options FollowSymLinks ExecCGI Indexes
    AllowOverride All
    Order deny,allow
    Deny from all
    Satisfy all
    </Directory>

    poi allowoverwrite compare altre volte in alcuni casi è a none in altre a all
    si riferiscono a delle directory particolari come ad esempio
    <Directory "C:/AppServ/Apache2.2/icons">
    oppure
    <Directory "C:/AppServ/www/cgi-bin">

    comunque riavviando apache non riesco ad accedere alla pagina mi dice pagina non trovata


  • User Attivo

    Ok, cerchiamo di isolare il problema: creati nella cartella imm un file chiamato pippo.htm, scrivici dentro qualcosa e verifica che tramite browser riesci a vedere quello che ci hai scritto.

    Quindi crea un file .htaccess e scrivici dentro:
    **RewriteEngine On **
    **RewriteRule ^topolino.htm pippo.htm **

    Prova ora a caricare da browser topolino.htm: se ti restituisce gli stessi contenuti del file pippo.htm ok, altrimenti hai un problema di configurazione di apache.


  • User

    scusa per il ritardo ma non ho ricevuto la notifica via mail della tua risposta

    allora non funziona mi dice pagina non trovata

    una cosa il file htaccess deve essere dentro la cartella imm vero ?


  • User Attivo

    Si, deve essere dentro la cartella in cui richiami il file (non in generale, solo nell'esempio).
    Detto ciò direi proprio che non ti funziona il modrewrite... 😄

    Sicuro di aver chiamato il file .htaccess con il punto (.) davanti?
    Inoltre la direttiva:
    LoadModule rewrite_module modules/mod_rewrite.so
    è presente nel file httpd.conf? Mi raccomando controlla che non sia preceduta dal cancelletto (#).

    Ti allego il mio httpd.conf, prova a fare un confronto con il tuo... e facci sapere!
    :ciauz:


  • User

    il punto davanti a htaccess non posso metterlo penso sia un problema di windows xp

    LoadModule rewrite_module modules/mod_rewrite.so
    questo c'è e non ha cancelletto


  • User Attivo

    @gustoinrete said:

    il punto davanti a htaccess non posso metterlo penso sia un problema di windows xp

    Se hai lasciato
    AccessFileName .htaccess
    il problema è qui! togli da httpd.conf il punto (.) davanti a tutti i richiami di htaccess. Praticamente apache cerca .htaccess mentre tu gli dai htaccess, un file dal nome diverso...

    Comunque se usi cuteFTP, da lì riesci sotto XP a rinominare un file anteponendo il punto (.):D


  • User

    sono in locale a fare i miei test

    ho tolto il punto davanti alla direttiva AccessFileName

    facendo il test topolino pippo non funziona... pagina non trovata
    bhooooo


  • User Attivo

    @gustoinrete said:

    sono in locale a fare i miei test

    Con cuteFTP, la finestra di sx (tipicamente) esplora le risorse locali e consente di rinominare i file...

    @gustoinrete said:

    ho tolto il punto davanti alla direttiva AccessFileName

    E davanti agli altri riferimenti? Devi fare trova/sostituisci in modo da eliminare il punto davanti ad ogni richiamo di htaccess... quindi riavvia tutto.


  • User

    ma nell'httpd.conf io ho solo quella voce che richiama .htaccess
    poi compare sotto forma di testo descrittivo come ad esempio qui

    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    

    oppure

    The following lines prevent .htaccess and .htpasswd files from being

    viewed by Web clients.

    o ancora

    The directive above can be placed in individual <Directory> blocks or the

    .htaccess file, with either the 'registry' (Windows behavior) or 'script'

    (Unix behavior) option, and will override this server default option.


  • User Attivo

    Hai verificato di avere il file mod_rewrite.so nella cartella *apache\modules*?
    Hai riavviato apache?

    Se non risolvi ti sposto nella sezione dedicata al Web Server sperando di trovare maggior fortuna!


  • User

    certo c'è
    e ho sempre fatto "restart apache" ad ogni modifica di httpd.conf


  • User

    non so se possa essere d'aiuto ma tutto il pacchetto l'ho installato con AppServ
    la directory sul mio pc è C:\AppServ\Apache2.2
    non so davvero cosa fare per fare qualche semplice test con il mod rewrite


  • Moderatore

    @gustoinrete said:

    salve sto facendo alcune prove stupidissime con il mod_rewrite su apache che gira sotto windows...

    allora la struttura del sito dove sto facendo le prove è la seguente
    http://localhost/imm/scheda_articolo.php?ida=2

    il file htaccess l'ho messo nella directory http://localhost/imm/

    e il file è molto semplice
    RewriteEngine on
    RewriteRule ^titolo_articolo.html scheda_articolo.php?ida=$1&%{QUERY_STRING}

    mi bastava fare una prova
    però non mi cambia il nome sulla barra degli indirizzi (ma la pagina funziona correttamente)
    avviso che il mod_rewrite è attivo tra i vari moduli (l'ho verificato eseguendo phpinfo())

    la sintassi è sbagliata....

    dev'essere RewriteRule ^titolo_articolo.html$ scheda_articolo.php?ida=$0

    non capisco il senso di quel {QUERY_STRING} alla fine, così facendo invalidi solo la query string da passare a scheda_articolo.php

    inoltre usando ^titolo_articolo.html$ la variabile $1 sarà vuota perchè l'espressione regolare genera un unico gruppo

    nel tuo caso devi usare $0 la quale conterrà il nome della pagina digitata nel browser, nome che sarà disponibile nello script php sotto la variabile ida


  • User

    quell'esempio è stato abbandonato da un bel pezzo :arrabbiato:

    non riesco nemmeno a far girare questa

    **RewriteEngine On
    RewriteRule ^topolino.htm pippo.htm **

    ci sono dei problemi con apache


  • Moderatore

    @gustoinrete said:

    quell'esempio è stato abbandonato da un bel pezzo :arrabbiato:

    non riesco nemmeno a far girare questa

    **RewriteEngine On
    RewriteRule ^topolino.htm pippo.htm **

    ci sono dei problemi con apache

    c'è un errore di sintassi anche in questa....

    l'espressione regolare deve iniziare con ^ e finire con $

    quindi dev'essere RewriteRule ^topolino.htm$ pippo.htm


  • User

    l'ho modificata

    RewriteRule ^topolino.htm$ pippo.htm

    ma comunque mi dice file non trovato se provo a collegarmi a
    http://localhost/imm/topolino.htm