我有一个URL格式的页面:
www.site.com/events/event.php?id=1&cat_id=4
我想重写成对SEO更友好的东西,即
www.site.com/events/name-of-event
(我不需要URL中的类别名称,只需要页面创建动态的breadcrumb链接)。
我的MySQL数据库中有事件名称,我想在URL中使用它。我试着用this answer修改代码,但没有成功。有人能帮上忙吗?
编辑:
这是我最初尝试的方法( cat_id对RewriteRule ^events/([^/]+)$ event.php?event_name=$1 [L,QSA]来说不是必需的,因为页面会检查并检索默认值,如果没有传递任何参数)。
发布于 2014-01-25 16:55:44
为了向后兼容,您可能希望将events/event.php?id=123重定向到新的events/event_name url。问题是,正如您在链接答案中所说的那样,没有真正的方法可以通过Apache连接到数据库,因此您必须在文件本身中处理重定向/转换。
规则本身必须如下所示:
RewriteRule ^events/([^/]+)/?$ /events/event.php?event_name=$1 [L,QSA]然后,在您的event.php中,您将执行如下操作:
#This is the top line of your file.
if( isset( $_GET['id'] ) ) {
$id = intval( $_GET['id'], 10 );
$event_name = do_database_query_NOAW( $id );
header( 'HTTP/1.1 301 Moved Permanently' );
header( 'Location: /events/' . $event_name );
exit();
}
#code that now uses (the sanitized) event name instead of the sanitized id
if( !isset( $_GET['event_name'] ) || !preg_match( '/[A-Za-z0-9-]+/', $_GET['event_name'] ) ) {
header( 'HTTP/1.1 400 Bad Request' );
exit();
}https://stackoverflow.com/questions/21337131
复制相似问题