使用slug从my​​sql中获取文章

时间:2010-03-10 14:54:10

标签: php mysql .htaccess url-rewriting

我正在我的网站上写自己的新闻文章部分,并将每篇文章存储在mysql数据库中。每篇文章都有一个唯一的id,一个标题,主体,并且感谢jquery插件,它是自己的url友好的slug。

但是,我不确定在连接到slug时我是如何获取文章的。

我如何得到:

www.site.com/news/nice-looking-title/

像:

一样工作
www.site.com/news/index.php?id=1

这样我就可以使用SQL从MySQL表中获取记录,例如:

tbl_news:
news_id
news_title
news_slug
news_body
news_date

是否涉及执行此操作的.htacccess?

与以往一样,所有和任何帮助都非常感谢! :)

2 个答案:

答案 0 :(得分:0)

您需要更改SQL查询以通过news_slug而不是news_id进行选择。一个简单的应用程序可以如下:

<强>的.htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/news #only do this for URLs beginning /news
RewriteRule (.*) /news/index.php [L] #redirect control to index.php

<强> PHP

$slug = explode('/', $)SERVER['REQUEST_URI']); // turn the path into an array
$slug = $slug[2]; // get the 2nd part of the array (nice-looking-title)
$query = sprintf ("SELECT * FROM tbl_news WHERE news_slug = '%s'", $slug); // new SQL query

注意:这个没有被测试过可能有错误!

答案 1 :(得分:0)

好的,我必须做的就是解决这个问题。有点hacky,但它确实有效。

让RewriteRule(。*)/ news / index.php在网站上引起无限循环,就像在新闻目录中拥有php页面一样。所以我不得不发送到不同目录名的链接,并将它们重写到实际目录。

<强>的.htaccess

RewriteCond %{REQUEST_URI} /guild-news
RewriteRule guild-news/(.*)/ news/news-item.php?slug=$1
RewriteRule guild-news/(.*) news/news-item.php?slug=$1

<强> PHP

$slug=$_GET['slug'];
$newsSQL = "SELECT *, DATE_FORMAT(news_date, '%W, %D %M, %Y') news_date_f FROM tbl_news WHERE news_slug = '".$slug."' AND news_visible=1";
$result = mysql_query($newsSQL, $conn) or die(mysql_error());

所以可能不是最好的代码,但它确实能够满足我的需求:)