提前感谢您的帮助。
我试图弄清楚如何重写使用我正在构建的简单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代码一样简单,请告诉我。
答案 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
但我不知道这是否正是您正在寻找的。 p>
重写规则是。
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>";
请记住,您还必须编辑管理页面以添加新字段。