Visualizzazione dei risultati da 1 a 9 su 9

Discussione: funzione rewrite

  1. #1

    funzione rewrite

    Salve, ho la necessità di usare la funzione rewrite, da quello che ho capito dovrei creare un file .htaccess e scrivere al suo interno le regole di rewrite, il problema è che dovrei anche abilitare la regola di rewrite in apache. Insomma non ho capito bene come posso fare.
    Le guide/discussioni che ho trovato su internet sono tutte molto datate (addirittura su questo sito c'è una pillola sull'argomento del 2004).
    Gli effetti che vorrei sarebbero questi:
    1) link pagina: /prova/pagina.php?filtro=prova2;
    1) rewrite: /prova/prova2;
    2) link pagina: /prova/pagina.php?filtro=prova2&filtro2=esempio;
    2) rewrite: /prova/prova2/?esempio;
    2) rewrite: /prova/prova2/?filtro2=esempio;
    2) rewrite: /prova/prova2/;

    Per quanto riguarda il secondo ho messo più risultati perchè vorrei ottenere nel seconod caso uno qualsiasi di questi, a tal proposito chiedo se nell'ultimo rewrite del secondo esempio il metodo GET perde di efficacia o se può essere ancora usato.
    Comunque la domanda finale è: come configuro il file .htaccess, e cos'altro dovrei toccare in apache?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    131
    ciao ti consiglio di usare un framework essenziale che ti spiega tutto ad esempio slim

    http://www.slimframework.com/

  3. #3
    Ciao, ho visto il framework, e proverò a installarlo per vedere se funziona a dovere.
    Nel frattemnpo avevo trovato questo su google:
    Codice PHP:
    <?php

    // initialize output buffer to compress page.
    // note: I recommend using 'ob_gzhandler' for pages >5kb. Any smaller its not worth it.
    ob_start('ob_gzhandler');
     
    // call the rewrite function.
    HandleRewrite();
     
    // do your page stuff...
    echo '[url="index.php?subpage=MYPAGE"]Hello World![/url]';
     
    // handle the URL rewriting
    function HandleRewrite()
    {
        
    // rewrite URLS from output buffer
        // note: it is IMPERATIVE this function is ABOVE the ob_start('rewrite') callback.
        
    function rewrite($buffer)
        {
            
    // this preg_replace changes "mysite.com/index.php?subpage=TEST to mysite.com/TEST
            
    $buffer preg_replace('/index.php\?subpage=(\w)/is'"$1"$buffer);
            return 
    $buffer;
        }
         
        
    // start the output buffer for rewriting ('rewrite' being the callback function)
        
    ob_start('rewrite');
    }
     
    ?>
    Funziona benissimo, l'unico problema è quando si vuole specificare una percorso dentro una cartella, ad esempio cambiandolo queste due righe così:
    Codice PHP:
    echo '[url="/prova/index.php?subpage=MYPAGE"]Hello World![/url]';
            
    $buffer preg_replace('/prova/index.php\?subpage=(\w)/is'"$1"$buffer);
    //oppure in quest'altro modo:
    $prova "../prova/index.php";
            
    $buffer preg_replace('/$prova\?subpage=(\w)/is'"$1"$buffer); 
    Il rewrite non funziona più nella maniera che avevo stabilito.
    Cosa sbaglio?

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    131
    ciao, non riesco bene a capire quello che vuoi fare
    ti stai inutilmente complicando la vita

    urlrewrite come avrai capito serve per riscrivere gli url, il metodo migliore e' configurarlo a livello server


    ad esempio questo file .htaccess


    codice:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]
    manda tutte le richieste al file index.php (nota il RewriteBase, in questo caso il mio file index sta alla root del dominio ad esempio www.dominio.it/index.php se fossi in una sotto cartella ad esempio www.dominio.it/prova/index.php il RewriteBase sarebbe /prova/ sono escluse dal rewrite i file realmente esistenti sul server se chiami ad esempio www.dominio.it/immagine.jpg e questa esiste viene fornito il file altrimenti la chiamata arriva al file index come le altre)

    nel tuo file index.php metti phpinfo(); e fai un po di prove di chiamata cosi puoi vedere cosa arriva e come trattare il tutto

  5. #5
    Ho un problema, installando quel modulo di rewrite adesso xampp quando si connette ad apache segnala questo problema:
    codice:
    18:55:14  [Apache] 	Attempting to start Apache app...
    18:55:14  [Apache] 	Status change detected: running
    18:55:15  [Apache] 	Status change detected: stopped
    18:55:15  [Apache] 	Error: Apache shutdown unexpectedly.
    18:55:15  [Apache] 	This may be due to a blocked port, missing dependencies, 
    18:55:15  [Apache] 	improper privileges, a crash, or a shutdown by another method.
    18:55:15  [Apache] 	Check the "/xampp/apache/logs/error.log" file
    18:55:15  [Apache] 	and the Windows Event Viewer for more clues
    Cosa è successo?
    Ah dimenticavo,ovviamente la connessione fallisce e non posso più entrare. Lo devo reinstallare?

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    131
    prova ad avviare xammp con diritti di amministratore

  7. #7
    OK, adesso funziona rifunziona tutto. Comunque ho dei problemi diciamo di logica:
    codice:
    RewriteEngine On
    RewriteRule ^prova.php$ /prova2.php [L,R=301]
    Così effettuo un redirect alla pagina prova2.php ogni volta che si cerca di aprire prova, cambiando anche l'indirizzo risultante(mis sembra più utile per un errore 404);
    codice:
    RewriteEngine On
    RewriteRule ^prova.php$ /prova2.php [L]
    Così apro il contenuto della pagina prova2 digitando l'indirizzo di prova.

    Quello che non riesco a capire è come fare ad aprire prova.php e riscrivere il suo nome.
    Ho fatto alte prove, ma non ti posto gli esempi perchè avevano risvolti strani, cope la ripetizione del nome prova2 per 6-7 volte, ecc.

  8. #8
    Così pare funzionare, anche se non ho capito perchè ma dei filtri che php imposta in automatico all'apertura della pagina vengono annullati e non mi dà più il contenuto:

    codice:
    RewriteRule ^prova/prova2$ /cartella/prova.php [L,NC,NS]
    Quindi il percorso risulterà valido come: prova/prova2 , anche se in realtà continuano a esistere due percordi validi per accedere alle pagina, perchè anche /cartella/prova.php continua a funzionare, ma bastera cambiare i collegamenti nelle pagine.
    Poi non ho capito bene come faccio ad assicurarmi che i vari get della pagina continuino a funzionare con il nuovo url. Controllerò per bene tutto, se hai qualche idea esponi pure.

  9. #9
    Un'ultima cosa. Come posso applicare un rewrtie ad una pagina già sotto rewrite?
    Esempio:
    codice:
    RewriteRule ^A$  http://localhost/A.php [L,NC,NS]
    RewriteRule ^A.php$ A [L,R=301]
    Così è ovviamente sbagliato, comunque vorrei prima fare in modo che A.php sia valido anche come A, e dopo vorrei che l'indirizzo A.php faccia un redirect verso A, che prima era stato convalidato e quindi dovrebbe essere valido. Il problema è che così creo un'indirizzo fasullo e non carica niente. Come posso fare?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.