Ответ 1
Вы не можете переписать номер имени, если у вас нет способа перевода этого числа на имя. Это означает, что на уровне http deamon (Apache/.htaccess) у вас недостаточно информации для перенаправления. Для перенаправления в php см. .
Поскольку вы спрашиваете о переписываниях в php, я тоже отвечу на это. В php файле нет такой вещи, как переписывание. Внутренняя переписывает один URL-адрес (например, www.domain.com/category/cat-name
) и позволяет серверу выполнять другой URL-адрес (например, www.domain.com/category.php?id=13
). Это происходит на уровне дебана http, в вашем случае Apache.
Сначала создайте .htaccess в своем www-root:
RewriteEngine on
RewriteRule ^category/[^/]+$ /category.php
В категории .php:
if( strpos( $_SERVER['REQUEST_URI'], 'category.php' ) != FALSE ) {
//Non-seo url, let redirect them
$name = getSeoNameForId( $_GET['id'] );
if( $name ) {
header( "Location: http://www.domain.com/category/$name" );
exit();
} else {
//Invalid or non-existing id?
die( "Bad request" );
}
}
$uri = explode( '/', $_SERVER['REQUEST_URI'] );
if( count( $uri ) > 1 ) {
$name = $uri[1];
} else {
//Requested as http://www.domain.com/category ?
die( "Bad request" );
}
Это перенаправит запросы к категории/имени, если вы запросите category.php? id = number и получите имя из URL-адреса, если вы запрашиваете категорию/имя