Как переписать имя на идентификатор?

Я пытаюсь переписать следующий URL

www.domain.com/category.php?id=13

в

www.domain.com/category/cat-name

Я следил за некоторыми учебниками .htaccess, но я не мог. Как я могу заставить его работать?

Ответ 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-адреса, если вы запрашиваете категорию/имя