PROZONE powered by Tophost
  Home   Forum   Regolamento Help Login Registrati   *
Statistiche
Utenti
Utenti Totali: 1707
Ultimo utente: xal
Statistiche
Posts Totali: 29470
Topics Totali: 3404
Online Oggi: 51
Presenze Massime Online: 559
(23 Luglio 2008, 14:24:28)
Utenti Online
Utenti: 2
Visitatori: 43
Totale: 45
Siti amici
Design & Multimedia

Dire e Fare il blog che ti aiuta

Wordpress
Pagine: [1]
 
Autore Topic: Guida A Mod_rewrite (parte 3)  (Letto 16557 volte)
SuperSavio
Utente Attivo
****
Posts: 274


Guida A Mod_rewrite (parte 3)
« il: 5 Luglio 2006, 14:49:55 »

Questa "pillola" non è stata realizzata da me ma da un'utente di Html.it. Visto che a molti interessa farsi indicizzare dai motori di ricerca e che questi ultimi indicizzano meglio indirizzi semplici tipo "html" piuttosto che quelli dinamici "php/asp", questo mini tutorial spiega come "trasformare" i nostri indirizzi dinamici in pagine html.

Questo è il mio primo tutorial e spero che sia scritto in modo soddisfacente.

Iniziamo:

1. Cosa fa il mod_rewrite?

Il mod_rewrite e' un modulo di apache che trasforma l'indirizzo digitato dal visitatore secondo precise regole decise dal webmaster e puo' essere utilizzato per far si che le pagine dinamiche (in questo esempio .php) con tutte le loro variabili sembrino delle pagine statiche .html.

2. Per cosa e' utile la trasformazione da pagine dinamiche a statiche?

Questa trasformazione serve a far si che la vostra pagina venga indicizzata meglio da un motore di ricerca. Un motore di ricerca infatti potrebbe avere qualche difficolta' a seguire un link del tipo:
Codice:
http://www.esempio.it/index.php?page=notizie&id=69

Tramite il mod_rewrite e la riscrittura dell'URL potremo trasformare il link qui sopra in una pagina del tipo:
Codice:
http://www.esempio.it/index/notizie/69.html

Una pagina di questo tipo, vi garantisco, l'ho provato personalmente, e' decisamente meglio vista dai motori di ricerca, google in primis.

In questo caso ho utilizzato 2 variabili nella mia URL in php:
Codice:
    * page
    * id

Ovviamente, piu' variabili utilizzeremo, minore sara' la considerazione della nostra pagina da parte del motore di ricerca.

3. Come posso far si che il mio web server apache mi accetti il codice di riscrittura degli URL?

a. Per fare questo dovrete aver caricato un modulo di apache chiamato appunto mod_rewrite.c

Solitamente si deve aprire il 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 basta far ripartire il web server apache.
b. Ora come verifica possiamo creare e lanciare un file .php con scritto:
Codice:
<?php
phpinfo
();
?>

Nella pagina ottenuta si cerchi la voce Loaded Modules e se all'interno di essa e' inclusa la dicitura mod_rewrite abbiamo la conferma che il modulo di riscrittura e' correttamente attivo e funzionante. Questa verifica non e' comunque esaustiva, in quanto se l'interprete PHP non e' caricato come modulo di apache la voce Loaded Modules non sara' presente anche se mod_rewrite e' effettivamente attivo.

Naturalmente se ci si avvale di un servizio di hosting condiviso non avremo accesso al file di configurazione dell'apache e a questo punto possiamo saltare il punto a passando immediatamente al punto b per verificare se il servizio e' attivo. In caso contrario possiamo richiederne l'attivazione direttamente al nostro hosting provider.

4. Sul mio server il servizio è attivo, ora cosa devo fare?

Partendo dal presupposto che il mod_rewrite funziona sia su macchine con sistema operativo Windows che Linux (in locale l'ho fatto su Windows, mentre in hosting su Linux). Si dovra' creare un file di testo che chiameremo .htaccess.

Dentro questo file andremo a scrivere la regola di riscrittura che vogliamo far interpretare al nostro web server.

Vi faccio 3 esempi di quello che si può fare. Poi chi e' piu' bravo di me con le espressioni regolari puo' fare miracoli:

* * * ESEMPIO 1 * * *

Se utilizzassimo il sistema di template in php descritto dalla guida del sito html.it che trovate a questo indirizzo: Un template con PHP e CSS

e di cui trovate un esempio funzionante all'indirizzo:
http://151.1.209.132/ft/index.php

Avremo come risultato delle pagine dimaniche di questo tipo:
Codice:
http://www.miosito.com/index.php?page=notizie&id=69

Google puo' facilmente ignorare tutto quello che c'e' dopo il punto di domanda e quindi il nostro sito web composto da centinaia di pagine potrebbe essere male indicizzato o solo in minima parte inserito nei motori di ricerca. Con questo sistema di template infatti Google percepisce solo la pagina "index.php" mentre in verita' tale pagina serve solo come contenitore atto a richiamare i vari menu' (notizie, contattaci, articoli, ecc. ecc.) che a loro volta devono richiamare degli articoli specifici (identificati dai numeri).

Ora vediamo come trasformare l'URL dinamico appena visto in una pagina statica del tipo:
Codice:
http://www.miosito.com/index/notizie/69.html

Per ottenere cio' non dobbiamo far altro che inserire la seguente regola nel nostro file .htaccess:
Codice:
RewriteEngine On
RewriteRule ^index/([^/]+)/([^/]+).html index.php?page=$1&id=$2 [L]

* * * ESEMPIO 2 * * *

Se il nostro sito gestisce una sola variabile come possiamo fare?
Codice:
http://www.miosito.com/notizie.php?id=69

Questa la regola mod_rewrite da inserire nel nostro file .htacess:
Codice:
RewriteEngine On
RewriteRule ^notizie/([^/]+).html notizie.php?id=$1 [L]

In questo modo il nostro URL statico sara':
Codice:
http://www.miosito.com/notizie/69.html

* * * ESEMPIO 3 * * *

Questo non differisce molto dai primi due esempi, tuttavia ci aiuta a capire l'ampio utilizzo che si puo' fare del mod_rewrite:

Supponiamo di utilizzare la classe "fpdf" per creare al volo file in formato ".pdf".

Per fare questo avremo delle pagine con la query al database per estrapolare i dati e a seguire le varie istruzioni per la classe, un qualcosa del tipo:
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

Una pagina del genere potrebbe essere richiamata con una URL di questo tipo:
Codice:
http://www.miosito.com/pdf_notizie.php?id=69

Invece tramite il nostro mod_rewrite potremo creare un "finto/vero" file .pdf:

Codice:
http://www.sito.com/pdf_notizie/69.pdf

A tutti gli effetti sembra di richiamare un vero file .pdf, e nessuno pensera' che in realta' si va a richiamare una pagina .php che genera "al volo" il file .pdf. Questo il codice di riscrittura da inserire nel solito file .htaccess:
Codice:
RewriteEngine On
RewriteRule ^pdf_notizie/([^/]+).pdf pdf_notizie.php?id=$1 [L]

4. Piccola finezza per migliorare l'aspetto finale della nostra pagina "statica"

Per fare i sofisticati e far indicizzare ancora meglio le nostre pagine ai motori di ricerca vogliamo che la nosta pagina "statica" abbia questo formato:
Codice:
http://www.miosito.com/notizie/69-titolo-notizia.html

La regola mod_rewrite da utilizzare sara' sempre la stessa:
Codice:
RewriteEngine On
RewriteRule ^notizie/([^/]+).html notizie.php?id=$1 [L]

Pero' avremo l'accortezza di inserire nella pagina "notizie.php" il seguente codice:
Codice:
<?php
$pagina 
$_GET[id];
$divisore explode("-"$pagina);
$id =  $divisore[0]; // restituisce il numero che si ha prima del "-"
$query mysql_query("Select * from notizie where id='$id'");
?>

In pratica quest'ultima annotazione e' un piccolo trucco in PHP. Occhiolino

Spero vivamente di essermi spiegato in modo chiaro e che tale tutoria possa essere utile a tutti.

P.S.: Su Tophost ho costatato che la dicitura Loaded Modules non e' visibile. Questo perche' da loro il PHP non e' caricato come modulo apache, ma come CGI. Tuttavia sembra che mod_rewrite sia attivo lo stesso.
« Ultima modifica: 29 Maggio 2007, 08:55:38 da effe8 » Loggato




Errare e' umano, ma per fare veramente casino serve la password di root.
maxconsx
Appena Entrato
*
Posts: 2


Guida A Mod_rewrite
« Risposta #1 il: 5 Agosto 2006, 11:30:33 »

Il mio host ha il server Apache e mi dà la possibilità di effettuare il Mod_rewrite del mio sito scritto in ASP, solo che non sono un webmaster e non so come cominciare.
E' possibile, dietro giusta remunerazione, trovare qualcuno che possa convertire le pagine dinamiche del mio sito in pagine statiche?
E' un sito di e-commerce a cui manca la cosa più importante: la vetrina di Google.
Grazie e ciao.
Max
Loggato
lacellula
Moderatore
*
Posts: 1 138


Guida A Mod_rewrite
« Risposta #2 il: 6 Agosto 2006, 09:03:12 »

Non credo di aver capito. Tu in pratica hai un sito che -ipoteticamente- genera queste url

script.asp?categoria=45?prodotto=125
script.asp?categoria=45?opzione=mostra

e vuoi passare in php facendo in modo che le due url di sopra, col mod rewrite, passino a un -altrettanto ipotetico-

script.php?categoria=45?prodotto=125
script.php?categoria=45?opzione=mostra

oppure vorresti che ogni pagina fosse *statica*, cioè senza script dinamici PHP?
 
Loggato

maxconsx
Appena Entrato
*
Posts: 2


Guida A Mod_rewrite
« Risposta #3 il: 7 Agosto 2006, 12:06:37 »

Penso che quello che hai scitto sia un passaggio intermedio, prima del risultato finale che dovrebbe essere, per esempio:

http://www.miosito.com/notizie/69-titolo-notizia.html

Cmnq, grazie per la risposta e disponibilità.
Ciao. Max
Loggato
celmania
Appena Entrato
*
Posts: 4


Guida A Mod_rewrite
« Risposta #4 il: 2 Dicembre 2006, 12:37:27 »

scusate allora io mi trovo in questa situazione

http://www.miosito.est/schede-cellulari/ve...cheda.php?id=74

ora vorrei che diventasse cosi

http://www.miosito.est/schede-cellulari/ve...nokia-6630.html per esempio

ho una pagina chiamata cat_cell.php dove vengono elencati tutti i cellulari divisi per marche e modello

ora nel mio .htaccess ho scritto

RewriteEngine On

##Schede cellulari
RewriteRule ^vedi-scheda/([^/]+).html$ vedi_scheda.php?id=$1 [L]

ora nel file cat_cell.php cosa devo inserire per dare quel risultato? dove sbaglio?

nel file vedi_scheda ho messo il seguente script ad inizio pagina:

Citazione
<?php
$pagina = $_GET[id];
$divisore = explode("-", $pagina);
$id =  $divisore[0]; // restituisce il numero che si ha prima del "-"
$query = mysql_query("Select * from schede where id='$id'");
?>

Suggerimenti?

Grazie
Loggato
zazza
Utente
***
Posts: 138


Guida A Mod_rewrite
« Risposta #5 il: 2 Dicembre 2006, 14:13:04 »

per quanto ne so io, non credo si possa fare una operazione come quella da te descritta.
Per fare quello che dici l'.htaccess dovrebbe conoscere l'esatta corrispondenza tra id e modello del cell, cosa che si può ottenere solo con delle interrogazioni ad un DB. E il file .htaccess non esegue interrogazioni a DB.
A meno che tu non voglia replicare all'interno delle regole di riscrittura tutta la tabella dei modelli di cell, aggiornandola di volta in vola ...
Loggato
Shake
Utente
***
Posts: 179


Guida A Mod_rewrite
« Risposta #6 il: 29 Marzo 2007, 14:40:20 »

Ottima pillola sul Mod_rewrite, che tra l'altro mi è stata proprio utile, ora però mi si è posto un piccolo "problema".
Cerco di spiegarmi con un esempio:

In principio, per accedere ad una determinata pagina dovevo utilizzare questo link:

www.miosito.it/pagina.php?id=10

Grazie al Mod_rewrite posso accedere alla pagina anche attraverso questo nuovo link:

www.miosito.it/pagina-10.html

E fin qui tutto ok, arriviamo quindi al mio "problema"

Vorrei che utilizzando il vecchio link "www.miosito.it/pagina.php?id=10" oltre che ad accedere normalmente alla pagina, l'url venisse automaticamente cambiato in "www.miosito.it/pagina-10.html".

E' possibile tutto questo?
Loggato

alessiof
Utente Attivo
****
Posts: 208


Guida A Mod_rewrite
« Risposta #7 il: 29 Marzo 2007, 14:47:31 »

Citazione
Vorrei che utilizzando il vecchio link "www.miosito.it/pagina.php?id=10" oltre che ad accedere normalmente alla pagina, l'url venisse automaticamente cambiato in "www.miosito.it/pagina-10.html".
 
mumble... aggiungendo in fondo alla riga della regola interessata " [R=301]" ottieni il comportamento desiderato?
Loggato

lacellula
Moderatore
*
Posts: 1 138


Guida A Mod_rewrite
« Risposta #8 il: 29 Marzo 2007, 14:53:17 »

Shake,
Se cerchi bene nel forum avevo già dato una risposta ad un quesito del tutto simile al tuo utilizzando mod_rewrite, una espressione regolare e header().
Loggato

Shake
Utente
***
Posts: 179


Guida A Mod_rewrite
« Risposta #9 il: 29 Marzo 2007, 15:00:08 »

[alessiof]
 :boh: No aggiungendo [R=301] non cambia nulla

[lacellula]
Linguaccia mi sa che mi è sfuggita allora, comunque da quanto mi è parso di capire non si tratta solo dell'utilizzo del Mod_rewrite, ma di una combinazione di questo con Php che modifica lui stesso l'header della pagina?
Loggato

federikazzo
Utente
***
Posts: 182


Guida A Mod_rewrite
« Risposta #10 il: 29 Marzo 2007, 19:43:48 »

Citazione
[cut] ma di una combinazione di questo con Php che modifica lui stesso l'header della pagina?
ni... tramite il mod_rewrite, intercetti le pagine da rimandare altrove (cioè quelle che finiscono in " ?id=.... " ) e le fai puntare ad uno script che, a sua volta, invia un header simile a questo:

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.nuovo.url.ext/percorso/file.ext");
Loggato

Fuoritema.net - My personal weblog...
Shake
Utente
***
Posts: 179


Guida A Mod_rewrite
« Risposta #11 il: 29 Marzo 2007, 21:23:41 »

Occhiolino Vi ringrazio davvero per l'aiuto
Loggato

lacellula
Moderatore
*
Posts: 1 138


Guida A Mod_rewrite
« Risposta #12 il: 29 Marzo 2007, 22:12:19 »

questo è il link

http://www.prozone.it/forum/index.php?show...indpost&p=18995
Loggato

Pagine: [1]
 
 
Salta a:  

Oggetto Iniziato da Risposte Visto Ultimo Post
Il modulo mi fa arrabbiare! puma512 2 2574 Ultimo Post 8 Febbraio 2009, 23:09:42
da puma512
Le cose da NON fare con AdSense. lacellula 0 3172 Ultimo Post 18 Settembre 2007, 10:32:19
da lacellula
Il Wi-max Come Strumento Anti Digital Divide luke 0 1844 Ultimo Post 11 Gennaio 2007, 15:57:40
da luke
Scrivere Articoli E Guadagnare Con Adsense guardaqua 0 3413 Ultimo Post 2 Febbraio 2006, 13:18:33
da guardaqua
La Psicosi Del Brodo Di Cappone effe8 2 2523 Ultimo Post 2 Marzo 2006, 21:30:15
da step76
Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC
Traduzione Italiana a cura di SMItalia

TinyPortal v0.9.8 © Bloc
XHTML 1.0 Valido! CSS Valido!


Ultima visita di Google a questa pagina Ieri alle 05:30:42