获取slug并用破折号写内容

时间:2012-12-26 11:07:53

标签: php .htaccess

我遇到了从使用短划线分隔slug的页面获取内容的问题。例如,如果我转到www.example.com/home它可以正常工作,但如果我去www.example.com/about-us它会得到一个错误Trying to get property of non-object,因为错误说的是关于这一行;

<h1><?php echo $page->Title; ?></h1>
<?php echo $page->Content; ?>

我有一个函数可以从数据库中看到这样的slug;

function getSlug($name = null) {
global $db;
if ($name) {
    $query = $db->prepare('SELECT * FROM pages WHERE `Title` = ? LIMIT 1');
    $query->execute(array($name));
    return $query->fetchObject();
}
}

我还有一个创建看起来像这样的slug的函数;

function createSlug($string){
    $string = preg_replace( '/[«»""!?,.!@£$%^&*{};:()]+/', '', $string );
    $string = strtolower($string);
    $slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
    return $slug;
}

在我的htaccess中我有规则RewriteRule ^([a-zA-Z0-9-/]+)$ index.php?name=$1 [L]

获取我使用以下代码的内容;

<?php
    include 'header.php';
    $slug = create_slug($_GET['name']);
    $page = getSlug($slug);
?>
<div class="container">
    <h1><?php echo $page->Title; ?></h1>
    <?php echo $page->Content; ?>
<?php include 'footer.php'; ?>

我真的不知道问题是什么。任何帮助将不胜感激。

提前致谢。亲切的问候

2 个答案:

答案 0 :(得分:0)

检查ModRewrite模块是否已启用,并且在.htaccess中检查以下行是否添加到顶部。

RewriteEngine On

答案 1 :(得分:0)

我通过在我的数据库中添加一行名为Slug来解决这个问题,我想如果我想让slug与标题不同,这也会更好。

感谢@ sk8terboi87的努力