如何使用数据库中的别名和ID创建对人员友好的URL?

时间:2015-01-19 01:17:14

标签: php .htaccess redirect

我创建了一个简单的CMS,其中每篇文章都有id,title,别名(对于URL),introtext,fulltext等,如下所示:

create table articles (
    id int auto_increment primary key,
    title varchar(80),
    alias varchar(80),
    introtext text,
    fulltext text,
    published tinyint(1),
    date date
)

使用ID访问文章很简单,URL类似于:

www.mysite.com/article?id=31

或者也许     www.mysite.com/article?menuid=3&id=31

在我的数据库中,文章如下:

id:3 标题:这是我的生活 别名:这就是我的生活 introtext:yadda ... yadda

目标是获取别名字段并使用它来创建人性化的URL:

www.mysite.com/this-is-my-life.php

www.mysite.com/index.php?article=this-is-my-life

www.mysite.com/?article=this-is-my-life

在任何情况下,文章ID用于从表中获取别名,别名成为人性化URL的基础。

我在CMS中经常看到这个,比如Joomla和Wordpress,甚至可能是zen-cart。问题是如何使用.htaccess中的PHP脚本或重定向功能实现此目的?

新信息(1月23日)

我们似乎正在和橘子说苹果,因为我不明白这是怎么回事。也许链接到简化的演示站点,您可以在其中看到正在运行的菜单ID结构。

http://dottedi.us/test

这比初始示例稍微复杂一些,但遵循相同的一般想法。实时演示基于使用joomla菜单管理器创建菜单项,包括URL和可选别名。它看起来像:

www.dottedi.us/test/index.php?option=com_k2&view=item&layout=item&id=5

Joomla和其他CMS系统(Wordpress,Drupal等)都有一个全局配置参数来启用他们称之为SEO友好的URL。我称他们对人友好。它将采用上述URL并将其转换为使用表中别名字段的人员友好版本,因此上述URL将成为

www.dottedi.us/test/about.php(带或不带.php后缀)

我没有使用链接字段作为可见的URL,而是可以使用别名字段,以便当您将鼠标悬停在它上面时它看起来像about.php,但我很困惑如何让它返回实时URL。您可以在以下位置看到:

http://dottedi.us/test2

我添加了一些调试输出,如果滚动到页面底部,可以看到。这有帮助吗?

1 个答案:

答案 0 :(得分:3)

使用mod_rewrite创建漂亮的网址

为此,请创建一个.htaccess文件并将其粘贴到其中。然后将其上传到您的站点根文件夹的索引。

快速提示:只需打开记事本(PC)或文本编辑(Mac)等文本编辑器,然后将其另存为.htaccess即可创建.htaccess文件。

<IfModule mod_rewrite.c>
  #article rewrite
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ /article.php?id=$1 [QSA]
</IfModule>

您的网址现在应如下所示:

www.mysite.com/this-is-my-life

INSTEAD OF:

www.mysite.com/article?id=31

我希望这有帮助!