如何将名称重写为id?

时间:2014-03-22 10:21:46

标签: .htaccess url

我正在尝试重写以下网址

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

为:

www.domain.com/category/cat-name

我已经关注了一些.htaccess教程,但我做不到。我怎样才能使它发挥作用?

1 个答案:

答案 0 :(得分:2)

您不能将数字重写为名称,除非您有某种方法将该数字转换为名称。这意味着在http deamon级别(Apache / .htaccess)上,您没有足够的信息来重定向它。对于php中的重定向,请参阅this

既然你在php中询问重写,我也会回答这个问题。在php文件中没有重写这样的东西。内部重写映射一个网址(例如www.domain.com/category/cat-name)并让服务器执行不同的网址(例如www.domain.com/category.php?id=13)。这种情况发生在http deamon级别,例如Apache。

首先在你的www-root中创建一个.htaccess:

RewriteEngine on
RewriteRule ^category/[^/]+$ /category.php

在category.php中:

if( strpos( $_SERVER['REQUEST_URI'], 'category.php' ) != FALSE ) {
  //Non-seo url, let's 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,这会将请求重定向到类别/名称,如果您请求类别/名称,则从网址获取名称