Pagina 1 di 33 1 2 3 11 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 327

Discussione: Mod rewrite

  1. #1

    [PILLOLA]Mod rewrite

    Questa è la mia prima pillola spero che sia scritta correttamente e in modo soddisfacente.

    Allora iniziamo:

    1 Cosa fa il mod rewrite ?

    Il mod rewrite serve per il vostro server apache a far si che le pagine dinamiche (in questo caso in php) cambino totalmente estensione e sembrino pagine html statiche

    2 Per cosa serve la trasformazione da dinamiche a statiche ?

    Questa trasformazione serve a far si che la vostra pagina venga assimilata meglio da un motore di ricerca. Un motore di ricerca potrebbe avere qualche difficoltà a seguire un link del genere:

    Allora tramite il rewrite dell'url potremo trasformare il link sopra in una pagina di questo tipo:

    Una pagina di questo tipo vi garantisco(l'ho provato personalmente nella mia piccolissima esperienza) è decisamente meglio vista dai motori di ricerca (google in primis)

    Io in questo caso ho utilizzato 2 variabili nella mia url in php :
    • page
    • id



    Ovviamente maggiori saranno le variabili minore sarà la considerazione che avrà della vostra pagina il motore di ricerca.

    3 Come posso far si che il mio apache mi accetti il rewrite ?

    - A -Per fare questo dovrete aver caricato un modulo di apache chiamato appunto mod_rewrite

    mod_rewrite.c

    Per fare questo dovrete andare nel file di configurazione di apache: httpd.conf e decommentare le seguenti righe :

    codice:
    LoadModule rewrite_module modules/mod_rewrite.so
    
    AddModule mod_rewrite.c

    Fatto questo restartare apache .
    - B - Provate a lanciare un file con dentro scritto :

    Codice PHP:
    <?
    phpinfo
    ();
    ?>
    Adesso nella pagina che otterrete cercate dove c'e scritto Loaded Modules e se vi sarà scritto mod_rewrite sarete pronti a partire per iniziare il vostro viaggio per quanto riguarda la riscrittura dei vostri indirizzi!!

    La maggior parte di noi (credo) si trova in host presso server in cui ovviamente non potrà modificare il file di configurazione al chè passate immediatamente al punto - B - e vedrete subito se sul vostro server il servizio è attivo.

    4 Ok sul mio server il servizio è attivo cosa devo fare ?

    Allora partendo dal presupposto che il rewrite funziona sia su macchine con OS windows che Linux(io in locale l'ho fatto su win e in hosting su linux).

    Dovrete creare un file che chiameremo .htaccess .

    Dentro questo file dovremo scrivere la regola che vogliamo far interpretare al nostro web server.

    Vi faccio 3 esempi di quello che si può fare (poi chi è più bravo di me con le espressioni regolari può fare miracoli):


    * * * ESEMPIO 1 * * *

    Se noi ad esempio utilizzassimo il sistema di template in php messo a disposizione dall'esempio del sito pho.html.it
    QUI L'ARTICOLO : http://pro.html.it/articoli/id_582/idcat_31/pro.html


    e qui l'esempio :
    http://151.1.209.132/ft/index.php

    Avremo delle pagine dimaniche di questo tipo :
    Cosa significa questo ?
    Significa che noi stiamo utilizzando 2 pagine e 2 variabili:

    Le pagini in questo caso sono index.php che avrà come codice una cosa più o meno simile
    Codice PHP:

    $p
    ="main";              //pagina di default per i contenuti centrali
    if(isset($_GET['page'])){      //pagina passata via parametro
        
    $p=$_GET['page'];
        if(
    $p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php"))
            
    $p="error";     //pagina di errore
        
    }
        include(
    $p.".php"); 
    Cioè include le pagine che le vengono passate tramite la variabile $page(?page=nomepagina) nella pagina che si sta visualizzando

    E poi c'è la pagina notizie.php che riceve i valori dalla variabile $id (&id=) e che la utilizzerà più o meno in questo modo :
    Codice PHP:
    <?
    $query 
    mysql_query("Select * from notizie where id='$_GET[id]'");
    ?>
    Allora avrete l'url detto in precedenza :

    Ma tra poco lo trasformeremo in una pagina di questo tipo:

    Per farlo non dovrete far altro che nel file .htaccess scrivere la seguente regola:

    codice:
    RewriteEngine On
    RewriteRule ^index/([^/]+)/([^/]+).html index.php?page=$1&id=$2 [L]
    E questa vi permette di fare la trasformazione dei link come detto sopra


    * * * ESEMPIO 2 * * *

    Il mio sito ha soltanto una variabile nell'url di questo tipo :


    Come dovrà essere la mia regola per il file .htaccess ??
    codice:
    RewriteEngine On
    RewriteRule ^notizie/([^/]+).html notizie.php?id=$1 [L]
    Questa mi permetterà di trasformare la pagina in
    * * * 3 ESEMPIO * * *

    Questo non differisce molto dai primi 2 ma serve soltano a far capire che ampio utillo si possa fare del rewrite:

    Supponiamo che io utilizzi la classe fpdf per creare al volo file in formato .pdf

    Per fare questo avremo delle pagine con dentro la query al db per estrapolare i dati e poi le varie istruzioni per la classe:

    Codice PHP:
    <?
    $query 
    mysql_query("Select * from notizie where id='$_GET[id]'");

    ............. 
    etc etc

    //includiamo la classe
    require('fpdf.php');

    $pdf=new FPDF();
    $pdf->AddPage();

    $pdf->SetFont('Arial','B',16);
    $pdf->Image('img/logo.jpg'50, -1010548);
    $pdf->SetTextColor(255,080,100);
    $pdf->write(8"                              $titolo\n\n");
    $pdf->SetTextColor(0,0,0);


    $pdf->write(8"-Autore: $autore\n\n");
    $pdf->write(8"Testo: $testo\n");


    ...... 
    etc etc
    Per richiamare il file pdf scriveremo una url di questo tipo qui :

    Invece tramite il nostro rewrite potremo creare un finto (o fasullo come preferite) file pdf vero e proprio:

    A tutti gli effetti sembra davvero un file pdf mai più andremmo a pensare che in realtà è una pagina in php

    Per realizzarlo basta scrivere nel rewrite questo:

    codice:
    RewriteEngine On
    RewriteRule ^pdf_notizie/([^/]+).pdf pdf_notizie.php?id=$1 [L]
    Cioè cambiare semplicemente l'estensione nella regola.


    Un pochino più sofisticato potrebbe essere anche utizzare nell'url cosa di questo tipo:

    Questo serve (a quanto ho letto nell'ultimo mese nella sezione motori di ricerca di questo forum e da quanto ho visto nelle varie agenzie di SEO = search engine optimized) a far digerire ancora meglio le nostre pagine ai vari MDR.

    La rule che dovrete usare sarà sempre la stessa:

    codice:
    RewriteEngine On
    RewriteRule ^notizie/([^/]+).html notizie.php?id=$1 [L]
    però nella vostra pagina php (cioè la notizie.php) userete il comando explode e metteremo questo :

    Codice PHP:
    <?php
    $pagina 
    $_GET[id];
    $divisore explode("-"$pagina);

    $id =  $divisore[0];// ti restituisce il numero che hai prima del -


    $query mysql_query("Select * from notizie where id='$id'");
    ?>

    Spero di essermi spiegato in modo chiaro e che vi possa essere utile

  2. #2
    da una rapida scorsa ottimo
    grande

  3. #3
    conosco già il mod_rewrite ma non ho mai pensato di farci una pillola... bravo!
    se può servire l'ho usato in una photogallery dinamica scaricabile dal mio sito
    http://www.andreapaiola.it/ripostiglio.php

    miniurl.rar


  4. #4
    bella pillola, giusto mi serviva
    grazie
    Errare humanum est, perseverare ovest
    IP camera con Raspberry Pi 2> http://forum.html.it/forum/showthrea...readid=2935440

  5. #5

    mod_rewrite x fast template

    Mi aggiungo anche io!

    sono partito dal fast template, un articolo di pro.html.it, per realizzare il mio sito.

    Ora, questo template richiama ogni pagina tramite un url dinamico del tipo /index.php?page=cartella/pagina
    Come facciamo a mutare in statico questo url?

    Semplice (beh!), nel file .htaccess scriveremo:
    codice:
    RewriteEngine On
    
    RewriteCond /htdocs%{REQUEST_URI} -f
    # presupposto che la vostra cartella, URL ASSOLUTO, del server sia /htdocs
    
    RewriteCond %{REQUEST_URI} ^(.*)\/(.*)\.php$
    
    RewriteCond %{REQUEST_URI} !^/script
    # l'ultima riga serve per evitare che la regola sia applicata a tutti i file contenuti nella
    # cartella /script (o meglio, a tutti gli url che iniziano per /script, a partire dalla root)
    
    RewriteRule ^(.*)\/(.*)\.php$ /index.php?page=$1/$2 [PT,L]
    Questo codice fa sì che, una volta richiamata la pagina /cartella/pagina.php, sia servito il contenuto di /index.php?page=cartella/pagina.

    Funziona anche con le directory annidate (es. /cartella/altracartella/pagina.php).

  6. #6
    Bene... pillola chiara. Raccoglie un'esperienza personale, anzi, piu' esperienze personali che esemplificano il tema.

    E' bene che si scelga di condividere le proprie esperienze. L'essenziale c'e'.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Originariamente inviato da piero.mac
    Bene... pillola chiara. Raccoglie un'esperienza personale, anzi, piu' esperienze personali che esemplificano il tema.

    E' bene che si scelga di condividere le proprie esperienze. L'essenziale c'e'.


    Ma grazie

  8. #8
    si devo dire che il mod rewrite è anche utile per le immagini se generate da db e tirate fuori tramite popup

    L'esempio è sempre lo stesso della pagina .pdf però dovrete sostituirlo con un .jpg

  9. #9

    Re: [PILLOLA]Mod rewrite

    Originariamente inviato da stefano3804
    Questo serve (a quanto ho letto nell'ultimo mese nella sezione motori di ricerca di questo forum e da quanto ho visto nelle varie agenzie di SEO = search engine optimized) a far digerire ancora meglio le nostre pagine ai vari MDR.

    La rule che dovrete usare sarà sempre la stessa:

    codice:
    RewriteEngine On
    RewriteRule ^notizie/([^/]+).html notizie.php?id=$1 [L]
    però nella vostra pagina php (cioè la notizie.php) userete il comando explode e metteremo questo :

    Codice PHP:
    <?php
    $pagina 
    $_GET[id];
    $divisore explode("-"$pagina);

    $id =  $divisore[0];// ti restituisce il numero che hai prima del -


    $query mysql_query("Select * from notizie where id='$id'");
    ?>

    Spero di essermi spiegato in modo chiaro e che vi possa essere utile
    Ciao utile pillola,

    in particolare l'osservazione che ho quotato, mette in risalto l'unico neo del mod_rewite (che rimane il sistema più efficiente per la riscrittura degli url): non è possibile ottenere le coppie chiave-valore quando il numero di variabili passato non è conosciuto in anticipo (cosa invece possibile con la query string).
    La soluzione è passare un'unica variabile che contenga una stringa da spezzare.

    Visto che, quando il numero di valori non è noto in anticipo, comunque bisogna spezzare le stringhe attraverso PHP io preferisco usare la direttiva "action" di Apache, per ridirigere tutte le richieste ad un unico script (una specie di front controller che fa tutto).

    Ad esempio

    AddHandler rewriting1 .phtml
    Action rewriting1 /path/controller.php

    AddHandler rewriting2 .ext
    Action rewriting2 /path/controller.php

    In questo modo posso decidere che tutte le pagine con una data estensione vadano redirette a controller.php

    e anche pagine inesistenti es.

    dir/chiave1-valore1/chiave2-valore2/chiave3-valore3.phtml

    Vengono inviate a controller.php che ricava chiavi e valori


    Vantaggi: più semplice di mod_rewrite se si utilizza abitualmente un controller

    Svantaggi: un unico script deve fare tutto e se non si utilizza già un controller meglio ricorrere a mod_rewite
    per favore NIENTE PVT TECNICI da sconosciuti

  10. #10

    Re: Re: [PILLOLA]Mod rewrite

    Originariamente inviato da Fabio Heller
    Ciao utile pillola,

    in particolare l'osservazione che ho quotato, mette in risalto l'unico neo del mod_rewite (che rimane il sistema più efficiente per la riscrittura degli url): non è possibile ottenere le coppie chiave-valore quando il numero di variabili passato non è conosciuto in anticipo (cosa invece possibile con la query string).
    La soluzione è passare un'unica variabile che contenga una stringa da spezzare.

    Visto che, quando il numero di valori non è noto in anticipo, comunque bisogna spezzare le stringhe attraverso PHP io preferisco usare la direttiva "action" di Apache, per ridirigere tutte le richieste ad un unico script (una specie di front controller che fa tutto).

    Ad esempio

    AddHandler rewriting1 .phtml
    Action rewriting1 /path/controller.php

    AddHandler rewriting2 .ext
    Action rewriting2 /path/controller.php

    In questo modo posso decidere che tutte le pagine con una data estensione vadano redirette a controller.php

    e anche pagine inesistenti es.

    dir/chiave1-valore1/chiave2-valore2/chiave3-valore3.phtml

    Vengono inviate a controller.php che ricava chiavi e valori


    Vantaggi: più semplice di mod_rewrite se si utilizza abitualmente un controller

    Svantaggi: un unico script deve fare tutto e se non si utilizza già un controller meglio ricorrere a mod_rewite

    Non ho capito come mai non ci sia la copia cache ?? Se il motore prende l'url perche non ci dovrebbe essere la cache ?

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