如何在php中创建动态URL?

时间:2014-12-19 16:56:01

标签: php mysql .htaccess url url-rewriting

我是PHP和MySQL的新手。

这是我迄今为止尝试过的内容,我无法理解如何使用PHP制作网址。

我想要做的是创建一个关于特定书籍的动态网页。我已经创建并在我的MySQL数据库中有一些数据可供使用。

我有一个功能来清除书名中的特殊字符。

function seo($s) {
$tr = array('ş','Ş','ı','İ','ğ','Ğ','ü','Ü','ö','Ö','Ç','ç');
$eng = array('s','s','i','i','g','g','u','u','o','o','c','c');
$s = str_replace($tr,$eng,$s);
$s = strtolower($s);
$s = preg_replace('/&.+?;/', '', $s);
$s = preg_replace('/[^%a-z0-9 _-]/', '', $s);
$s = preg_replace('/\s+/', '-', $s);
$s = preg_replace('|-+|', '-', $s);
$s = trim($s, '-');

return $s;
}

实施例

echo seo($booktitle);

的.htaccess

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^/(.*)-(.*)$ /book.php?id=$1 [L,NC]

链接类型

echo "<a href='http://sitename.com/".$bookid."-".seo($booktitle)."'>".$booktitle."</a>";

我想要的输出

http://sitename.com/id-book-title    

问题是,我不明白如何动态地将$ bookid从url传递给php本身。我想我需要从我的数据库中检索book_id并将其分配给$ bookid变量,这是正确的吗?但是如何将其连接到URL?

例如,当我输入网址http://sitename.com/5-the-trial时,我需要获取ID为5的图书页面。

这里缺少什么?你能引导我找到正确的方向来创建动态网址吗?如果可能的话,我都需要指导(学习,搜索等)以及我问题的具体答案。

2 个答案:

答案 0 :(得分:1)

将重写规则替换为:

Options +FollowSymLinks
RewriteEngine on

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

答案 1 :(得分:1)

你的要求不太清楚。如果您想创建一个列出图书网址的页面,那么您的回声声明就不远了。您只需要从数据库中填充$ bookid和$ booktitle。 .htaccess没有参与。

echo "<a href='http://sitename.com/".$bookid."-".seo($booktitle)."'>".$booktitle."</a>";

但是如果要解压用户单击的链接的URL,则需要查看传递给页面的查询字符串。 .htaccess为您分解URL并将$ 1参数传递到您的脚本中。要阅读PHP中的URL,请尝试以下

parse_str($_SERVER['QUERY_STRING'],$query);
if (array_key_exists('id',$query)) {
   $books = explode("-",$query['id']);
}

这将在第一个元素($ books [0])中创建一个包含book id的数组,在第二个元素中创建一个标题的第一个单词等。(如果你想使用这种方法并拥有整个标题第二种,您可能希望使用不同的字符来区分标题中的id和用于替换空格的字符。