首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >名称来自数据库的mod_rewriting

名称来自数据库的mod_rewriting
EN

Stack Overflow用户
提问于 2014-01-25 00:03:17
回答 1查看 57关注 0票数 0

我有一个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]来说不是必需的,因为页面会检查并检索默认值,如果没有传递任何参数)。

EN

回答 1

Stack Overflow用户

发布于 2014-01-25 16:55:44

为了向后兼容,您可能希望将events/event.php?id=123重定向到新的events/event_name url。问题是,正如您在链接答案中所说的那样,没有真正的方法可以通过Apache连接到数据库,因此您必须在文件本身中处理重定向/转换。

规则本身必须如下所示:

代码语言:javascript
复制
RewriteRule ^events/([^/]+)/?$ /events/event.php?event_name=$1 [L,QSA]

然后,在您的event.php中,您将执行如下操作:

代码语言:javascript
复制
#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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21337131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档