mod_rewriting,来自数据库的名称

时间:2014-01-24 16:03:17

标签: php apache .htaccess mod-rewrite

我有一个包含网址格式的网页:

www.site.com/events/event.php?id=1&cat_id=4

我想重写一些更友好的SEO,即

www.site.com/events/name-of-event

(我的URL中不需要类别名称,仅用于创建动态痕迹链接的页面)。

我的MySQL数据库中有事件名称,我想在URL中使用它。我试图在this answer中修改代码,但没有成功。有人可以帮忙吗?

编辑:

RewriteRule ^events/([^/]+)$ event.php?event_name=$1 [L,QSA]这是我最初尝试的(cat_id对于URL不重要,因为页面检查并检索默认值,如果没有传递)。

1 个答案:

答案 0 :(得分:0)

为了向后兼容,您可能希望将events/event.php?id=123重定向到新的events/event_name网址。问题在于,正如该人在您的链接答案中所说,没有真正的方法可以通过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();
}