Я бы порекомендовал использовать идентификатор вместе с именем, чтобы вы могли поддерживать продукты с тем же именем (проверка на будущее) или продукты с не-ascii символами ... если у вас есть международные имена.Я также рекомендовал бы использовать только символы ascii в URL-адресах, так как я заметил, что некоторые сайты и браузеры имеют тенденцию расширять символы не ascii до уродливого процента кодирования.
IIS 7 немного сложнее, чем Apache, но я думаю, что это может сработать для вас http://blogs.iis.net/bills/archive/2008/05/31/urlrewrite-module-for-iis7.aspx
Вот пример правила перезаписи, которое удаляет имя из идентификатора и пропускает толькоидентификатор сценария.
IIS 7 Использование модуля по ссылке выше
Соответствующий URL
^([0-9]+)[^/]*/?$
Действие
index.php?id={R:1} [QSA,L]
Apache просто для хорошего беспорядка;)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([0-9]+)[^/]*/?$ index.php?id=$1 [QSA,L]
Вот функция PHP, которая будет генерировать часть имени идентификатора ваших дружественных URL.
function friendlyURL($id, $title) {
$string = $title;
$paramcount = func_num_args();
for ($i = 2; $i < $paramcount; $i++) {
$string .= "-" . func_get_arg($i);
}
$string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i', '-', $string);
$string = htmlentities($string, ENT_COMPAT, "utf-8");
$string = preg_replace("`&([a-z]+);`i", "", $string);
$string = preg_replace("`['\[\]]`", "", $string);
$tmp = $string;
$string = preg_replace(array("/[^A-Za-z0-9]/", "`[-]+`"), "-", $string);
$string = trim($string, '-');
return trim($id . "-" . $string, '-');
}
Это даст вам URL-адреса, такие как
Идентификатор продукта = 12345, Имя = "acme super widget"
/12345-acme-super-widget/
Идентификатор продукта = 12345, Имя = "Японский продукт ギ タ ー"
/12345-japanese-product/