如何创建动态URL?

时间:2011-08-05 22:11:31

标签: php html css url

我有一个社交网络,允许用户写博客和提问。我想创建动态URL,通过PHP在URL末尾发布博客或问题的标题。

示例:

www.blah.com/the_title_here

寻找最简洁有效的方法来实现这一目标。

4 个答案:

答案 0 :(得分:6)

您通常会将URL友好的“slug”存储在数据库行中,然后使用PHP脚本查找匹配该slug的帖子。

例如,如果您有一个名为index.php的脚本,该脚本使用了一个名为slug的参数......

<?php
if (isset($_GET['slug'])) {
    $sql = "SELECT * FROM `your_table` WHERE slug = ? LIMIT 1";
    $smt = $pdo->prepare($sql);
    $smt->execute(array($_GET['slug']));
    $row = $smt->fetchObject();
    // do something with the matching record here...
}
else {
    // display home page
}

...然后您可以使用.htaccess重写请求:

RewriteEngine on
RewriteRule ^(.+)$ index.php?slug=$1

答案 1 :(得分:2)

使用数据库执行此操作将悲伤 :( 在许多情况下,您不需要查找数据库,您将使用此方法。例如: - www.blah.com/signup(这里没有意义)。数据库连接占用资源,资源严重......

RewriteEngine on
RewriteRule ^(.+)$ index.php?slug=$1

如马丁所示,可以获得路径或slu ..

大多数框架使用文件系统来实现更清晰的URL。 一个文件夹,用于存放所有文件和 在理论上与

类似的东西
<?php
$default = "home";
//function to make sure the slug is clean i.e. doesnot contain ../ or something
if(isset($_GET['slug'])) $slug = clean($_GET['slug']);
if(!isset($slug)) $slug = $default;
$files = explode('/',$slug);// or any other function according to your choice
$file = "./commands/".$files[0].".php";
if(file_exists($file))
    require_once($file);
else
    require_once("./commands/".$default.".php");

你可以根据需要简单到复杂。您甚至可以使用数据库来确定默认情况,就像Martin所做的那样,但这应该在$default而不是您使用的第一个逻辑......

这样做的好处

  1. 比查询数据库更快
  2. 你可以扩展很多。垂直例如:site.com/users/piyushmishrasite.com/forums/mykickassforum甚至更深层次的site.com/category/category-name/post-name/comments/page-3
  3. 您可以更轻松地设置库和包。水平缩放(添加更多目录以进行检查,每个目录可以设置一个/多个模块)例如:./ACLcommands/users.php./XMLRPC/ping.php

答案 2 :(得分:1)

有很多开源软件可以执行此操作,您可以查看WordPress.org或MediaWiki.org来执行此操作。您需要.htaccess或Apache配置设置的组合才能向其添加mod_rewrite规则。

接下来,您将需要一个控制器文件,如Martin Bean所写,以查找帖子...但请确保您正确地转义/清理/验证输入,否则如果您有JavaScript,则可能容易受到SQL注入或XSS攻击在您的网站上。

所以最好使用id方法,只使用slug进行漂亮的url目的。 WordPress.org软件还表明,只有通过slug才能让它在你有大量帖子后变慢。因此,您可以使用www.blah.com/slug-phrase-goes-before-the-numeric_id的组合并编写一个RegExp来匹配:.*(\d+)$

答案 3 :(得分:0)

"www.blah.com/$id/".preg_replace('/^[a-z-]+/','',preg_replace('/[ ,;.]+/','-',strtolower($title)))

并仅使用$id

来自标题

"How do I create dynamic URLs?"

它创建了网址

www.blah.com/15/how-do-i-create-dynamic-urls