重写?id = __到存储在db行中的页面标题

时间:2011-10-17 05:04:07

标签: php mysql .htaccess content-management-system rewrite

提前感谢您的帮助。

我试图弄清楚如何重写使用我正在构建的简单cms编程创建的动态URL。代码输出带有ID的URL(www.mysite.com/index.php?id=1)。我想修改代码,以便输出ID为1的行的标题,例如www.mysite.com/home或www.mysite.com/about,其中about是存储在行中的标题ID为1的db。

以下是代码输出方式的示例:

$result = mysql_query("SELECT id, title FROM pages");

while ($row = mysql_fetch_array($result)) {
    // Do not list the home page twice
    if ($row['id'] != $homeID) {
        $pageID = $row['id'];
        $pageTitle = $row['title'];

        echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID'>$pageTitle</a></li>";
    }

我将从http://fwebde.com/web-design/creating-a-php-cms-part-1/

离开CMS教程

非常感谢任何帮助。我尝试了很多.htaccess重写,但没有一个有效。如果这就像切换MySQL代码一样简单,请告诉我。

2 个答案:

答案 0 :(得分:1)

您必须修改生成链接的行:

echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID'>$pageTitle</a></li>";

您可以将标题添加为单独且未使用的&title=参数,这是一个很好的黑客,以避免必须修改其他任何内容:

echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID&title=$pageTitle'>$pageTitle</a></li>";

或生成123+title个链接:

echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID+$pageTitle'>$pageTitle</a></li>";

这需要调整实际的“cms”调度程序代码,因为它必须从$ _GET参数中分解id和标题。

甚至用标题代替整个index.php?id=

echo "<li><a href='" . BASE_URL . "/$pageTitle'>$pageTitle</a></li>";

反过来需要部署.htaccess规则(类似htaccess URL routing for PHP MVC?)。您必须再次修改index.php脚本,才能从id查找title。只有当数据库中的标题都是唯一的时候,这才会有效。

P.S。:您实际上也应该使用urlencode($pageTitle)htmlspecialchars()上的$pageTitle成为链接文字。

答案 1 :(得分:0)

它不会像你想的那么容易。最简单的方法是在最终网址中包含页码。 http://www.mysite.com/1/articles但我不知道这是否正是您正在寻找的。

重写规则是。

RewriteRule ^([0-9]*)/.*$ index.php?id=$1

我在自己的CMS系统上所做的是在名为urlname的页面表中添加另一个字段。这将是URL访问该页面的内容。您需要更改$ _GET ['id']的所有引用。

将此添加到functions.php。

function thisPageId(){
    $sql="SELECT id FROM pages WHERE urlname = '" . $_GET['urlname'] ."'";
    $result=mysql_query($sql);
    $row=mysql_fetch_assoc($result);
    return $row['id'];
}

htaccess重写规则

这会将任何不存在的请求重定向到index.php?urlname = ...

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.*) index.php?urlname=$1

使用thisPageId中的值替换对$ _GET ['id']的任何引用。对于listPages函数以及显示url的任何其他位置,您将执行类似的操作。

echo "<li><a href='" . BASE_URL . "/" . $row['urlname'] . "'>$pageTitle</a></li>";

请记住,您还必须编辑管理页面以添加新字段。