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: 44
Totale: 46
Siti amici
Design & Multimedia

Dire e Fare il blog che ti aiuta

Wordpress
Pagine: [1]
 
Autore Topic: [pillola]mod Rewrite  (Letto 4702 volte)
SuperSavio
Utente Attivo
****
Posts: 274


[pillola]mod Rewrite
« il: 4 Luglio 2006, 00:49:00 »

Questa Pillola che sta per seguire nn è stata realizata da me ma da un'utente di Html.it, visto che a molti interessa farsi indicizzare dai motori di ricarca questa pillola dice come farlo spiegando che il motori di ricarca indicizzano più indirizzi semplici html che quelli dinamici in php, quindi una conversione da codice dinamico a quello html

INIZIO PILLOLA
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:

codice:

http://www.esempio.it/index.php?page=notizie&id=69

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

codice:

http://www.esempio.it/index/notizie/69.html


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 :
Codice:

    * 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:
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:
Codice:
<?
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 :
codice:

www.sito.com/index.php?page=notizie&id=69


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:
Codice:
$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:
Codice:
<?
$query = mysql_query("Select * from notizie where id='$_GET[id]'");
?>

Allora avrete l'url detto in precedenza :

codice:

http://www.sito.com/index.php?page=notizie&id=69



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

codice:

http://www.sito.com/index/notizie/69.html

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

codice:
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 :

codice:

http://www.sito.com/notizie.php?id=69



Come dovrà essere la mia regola per il file .htaccess ??
codice:
Codice:
RewriteEngine On
RewriteRule ^notizie/([^/]+).html notizie.php?id=$1 [L]


Questa mi permetterà di trasformare la pagina in
codice:
Codice:
http://www.sito.com/notizie/69.html


* * * 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:
Codice:
<?
$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, -10, 105, 48);
$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 :

codice:
[url=http://www.sito.com/pdf_notizie.php?id=69]http://www.sito.com/pdf_notizie.php?id=69
[/URL]


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

codice:

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


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:
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:

codice:

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



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:
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:
Codice:
<?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

FINE PILLOLA

la cosa che ho costatato e che su tophost il modulo Loaded Modules nn è attivo  quindi questa pillola nn funzionerebbe però vorrei anche chiedere ai tecnici se c'è la posbbilità di attivare questo modulo.

Grazie  Wow
« Ultima modifica: 4 Luglio 2006, 00:54:13 da SuperSavio » Loggato




Errare e' umano, ma per fare veramente casino serve la password di root.
lacellula
Moderatore
*
Posts: 1 138


[pillola]mod Rewrite
« Risposta #1 il: 4 Luglio 2006, 11:26:39 »

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

Converrebbe togliere gli eventuali problemi di sicurezza legati alla superglobal $_GET
Loggato

lacellula
Moderatore
*
Posts: 1 138


[pillola]mod Rewrite
« Risposta #2 il: 4 Luglio 2006, 11:30:49 »

Citazione
la cosa che ho costatato e che su tophost il modulo Loaded Modules nn è attivo quindi
questa pillola nn funzionerebbe però vorrei anche chiedere ai tecnici se c'è la posbbilità di attivare questo modulo.
Grazie biggrin.gif

(maledetta mancanza del tasto edit  :lol: )

In realtà su TopHost il modulo mod_rewrite, ed .htaccess funziona egregiamente. Ho usato riscritture su siti relativamente complessi senza mai avere un problema.
Loggato

SuperSavio
Utente Attivo
****
Posts: 274


[pillola]mod Rewrite
« Risposta #3 il: 4 Luglio 2006, 22:12:37 »

Citazione
Citazione
la cosa che ho costatato e che su tophost il modulo Loaded Modules nn è attivo quindi
questa pillola nn funzionerebbe però vorrei anche chiedere ai tecnici se c'è la posbbilità di attivare questo modulo.
Grazie biggrin.gif

(maledetta mancanza del tasto edit  :lol: )

In realtà su TopHost il modulo mod_rewrite, ed .htaccess funziona egregiamente. Ho usato riscritture su siti relativamente complessi senza mai avere un problema.
nn ho ancora  testato il tutto, quando dicevo che il servizio nn è attivo e perchè nella pillola dice di leggere il phpinfo() e di trovare la voce Loaded Modules, io questa voce nn l'ho trovata, però se te mi dici che hai usato questo modulo e ti è sempre funzionato egregiamente ti ringrazio per l'informazione datami  Wow  
Loggato




Errare e' umano, ma per fare veramente casino serve la password di root.
effe8
Coordinatore
*
Posts: 837


[pillola]mod Rewrite
« Risposta #4 il: 5 Luglio 2006, 16:00:35 »

Bel lavoro, questa guida la passo sul feed RSS e sposto la discussione nell'apposita area.

http://www.prozone.it/forum/index.php?showtopic=1634

Ciao a tutti.

 
Loggato

Pagine: [1]
 
 
Salta a:  

Oggetto Iniziato da Risposte Visto Ultimo Post
Ottimizzare Mysql Per Prestazioni Migliori effe8 3 15351 Ultimo Post 10 Marzo 2009, 10:01:20
da MySeQuoiaL
Guida A Mod_rewrite (parte 3) SuperSavio 12 16556 Ultimo Post 29 Marzo 2007, 22:12:19
da lacellula
Consiglio su passaggio ad Aruba Virtual Server « 1 2 » tty78 18 8748 Ultimo Post 22 Giugno 2007, 15:37:44
da tty78
Prozone Raggiunge Il Primato effe8 0 6739 Ultimo Post 18 Marzo 2006, 15:16:39
da effe8
Mod_rewrite X Sito Multilingua countzero 7 2391 Ultimo Post 29 Aprile 2006, 10:44:35
da countzero
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 3 Agosto 2010, 02:08:43