我有一个包含网址格式的网页:
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不重要,因为页面检查并检索默认值,如果没有传递)。
答案 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();
}