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