Предположим наш сайт содержит огромное кол-во музыки. Которая распределена по жанрам, а жанры уже разбиты на группы.
Тогда замененная ссылка будет выглядеть примерно так:
http://mus_site.net/music/S1 /G1.html
А ссылка обработчика допустим вот так:
http://mus_site.net/show_music.php?style=1&group=1
Ну и правило оказывается не так и сложным, просто чуток длиннее.
RewriteRule ^music/S([0-9]*)/G([0-9]*)\.html$ /show_music.php?style=$1&group=$2
url получается хоть и привлекательный, но не совсем понятный. Надо бы добавить ключевых слов. Чтобы вышло примерно следующее:
http://mus_site.net/music/style/group.html
Но сделать это уже сложнее, так как явных идентификаторов в такой ссылке нету. Можно добавить в таблицу поле, которое будет связывать url с ключевиками и url, созданные обработчиком. А можно добавить идентификаторы к ключевым словам и получить вот такой url:
http://mus_site.net/music/style-s1/group-g1.html
Такая ссылка содержит ключевые слова и подогнать её под обработчик не составит труда.
RewriteRule ^.*-s([0-9]+)/.*-g([0-9]+)\.html$
/rewrite/index.php?style=$1&group=$2 [L]
Учтите, что в файле .htaccess писать правило надо в одну строчку.
Теперь смоделируем реальную ситуацию, в которой создание ссылок положим на плечи php. Представим, что у сайта есть бд в которой хранятся стили и музыкальные группы. Наша задача из всего этого сделать ссылку, которую поймет наше последнее правило mod_rewrite.
В одной умной книжке подобная задача уже была решена с помощью двух функций, которые мы сейчас и рассмотрим.
functions.php
<?php
define('SITE', 'http://localhost/rewrite/');
//приводим url к нормальному виду
function clear_url($str)
{
$good_liters= '#[^-a-zA-Z0-9_]#';
//оставляем латиницу, подчеркивания, пробелы и дефисы.
$str = preg_replace($good_liters, '', $str);
//откусываем пробелы по сторонам
$str = trim($str);
//и всё подменяем дефисами
$str = preg_replace('#[-_ ]+#', '-', $str);
return $str;
}
//делаем ссылку с ключевиками
function create_url($cat_name,$cat_id,$group_name,$group_id)
{
$clear_cat_name = clear_url($cat_name);
$clear_group_name = clear_url($group_name);
$url = SITE.$clear_cat_name.'-s'.$cat_id .'/'.
$clear_group_name.'-g'.$group_id.'.html';
return $url;
}
?>
nav.html
index.php
<?php
include("functions.php");
include("nav.html");
echo 'стиль группы c номером '.$_REQUEST['style'].' а сама группа под номером '.$_REQUEST['group'];
?>
Как вы можете догадаться в строчку
create_url(”dance_music”,2,”pop group”,32)
нужно просто подставить значения при выводе из бд. И всё будет как надо