如何在地址栏中自定义URL以显示文章标题?

时间:2013-12-06 20:05:49

标签: php .htaccess

我正在尝试弄清楚如何修改地址栏中的网址以显示文章的标题。

我有一个博客,其帖子是从mysql数据库中提取的,每个博客帖子详细视图的链接都是blog_details.php?lesson_id=$articleID生成的。我似乎无法弄清楚的是,我如何重写网址以显示/article-title/而不是/blog_details.php?lesson_id=abc以及在检索帖子内容时如何处理新网址。

我知道如果我使用

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ /blog_details.php?lesson_id=$1

它会显示为abc,但abc不是帖子的标题,而是ID。我是否需要在我的数据库中创建一个单独的列并将url-article-title存储在其中,然后将该信息传递到URL blog_details.php?lesson_id=

另一个问题是,在我的blog_details.php中,我正在使用if(isset()){$ _GET []}来检索当前的文章ID并通过它加载帖子的内容。我如何修改$ _GET请求以检索新网址?

2 个答案:

答案 0 :(得分:2)

如果您希望网址只是/article-title,那么添加“slug”列会更有效率,正确索引并使用它来检索条目。

如果您对/article-title/id这样的网址没问题,可以在不触及数据库的情况下完成此操作。我假设ID是一个数字。

RewriteRule ^([^/]+)/([0-9]+)$ /blog_details.php?lesson_id=$2

这类似于StackOverflow处理其URL的方式。您绝对应该在网站上输出规范网址以防止重复内容,因为传递的“标题”无关紧要并且可能会变得奇怪。例如:/some-article-title/123/some-other-article-title-123都会将您带到123

答案 1 :(得分:1)

这是我在这种情况下通常做的事情。 首先,您需要创建一个单独的列并存储文章的标题。 然后,使用此规则..您可以重写: - blog_details.php?lesson_id = 到此: - 的 /物品/ articletitle

重写规则: -

RewriteRule ^articles/(.+)$ blog_details.php?id=$1 [L,QSA]

注意: - 您需要通过ID获取网址标题。