我正在尝试重写以下网址
www.domain.com/category.php?id=13
为:
www.domain.com/category/cat-name
我已经关注了一些.htaccess教程,但我做不到。我怎样才能使它发挥作用?
答案 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,这会将请求重定向到类别/名称,如果您请求类别/名称,则从网址获取名称