.htaccess将带有锚标记的URL Slug附加到

时间:2018-12-27 15:29:42

标签: php .htaccess content-management-system slug pretty-urls

我正在Core PHP中创建一个博客,以更好地了解CMS的核心功能。但是,当我显示单个帖子时,我在菜单中面临挑战。

我正在使用下面的.htaccess代码

# code to make pretty URLS | we're using this code to achieve /category/slug
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/([\w-]+)/([\w-]+)$ app/post.php?&category=$2&slug=$3 [L,QSA]
RewriteRule ^(.+)/([\w-]+)$ app/post.php?category=$2 [L]

上面的代码会将www.example.com/post.php?category=some&slug=title-ti转换为www.example.com/some/title-ti

现在发生的是当我在索引页面上时,我正在动态生成菜单。所以菜单是根据子弹。

Technology - usage-tips - overview

上述菜单URL类似于www.example.com/technology,“ www.example.com/usage-tips”,“ www.example.com/overview”

但是当我打开单个帖子页面

我拥有的网址是www.example.com/technology/demo-post

我得到的菜单URL是

以上菜单URL将像www.example.com/technology/technology,“ www.example.com/technology/usage-tips”、“www.example.com/technology/overview”,而进入其中的更多内容就像是无尽的循环。

如果我检查元素为www.example.com/usage-tips,依此类推,但是当我单击或悬停链接时,我将重定向到www.example.com/technology/usage-tips链接

这是怎么回事,我的php代码或.htaccess代码有错误

以下是我的动态标头代码

$query = ' SELECT id, name, slug FROM categories WHERE status = 1 AND parent_id = "'.$parent_id.'" ORDER BY priority ASC ';
    $connection = $this->establish_connection();
    $data = $connection->query($query);
    $connection->close();
    if($data->num_rows > 0)
        {
            $putclass = $menu = "";
            while($row = $data->fetch_assoc())
                {
                    if($arrow_status)
                        {  $putclass = "";  }
                    else
                        { $putclass = "drop";   }

                    $menu .= '<li class='.$putclass.'><a href="'.$row["slug"].'">'.$row['name'].'</a>';
                    $menu .= '<ul class="dropdown">'.$this->menu($row["id"], true).'</ul>';
                    $menu .= '</li>';
                }

            return $menu;
        }

这是我的post.php代码

<?php
    // print_r($_GET);
?>
<?php
    if(isset($_GET['category']) && isset($_GET['slug']))
        {
?>
            //some content if both are set
<?php
        }

    elseif(isset($_GET['category']) && !isset($_GET['slug']))
        {
?>
            //some content if only category is set
<?php
        }
?>

1 个答案:

答案 0 :(得分:1)

您想以这种方式使用absolute-path reference,浏览器将从站点的根目录而不是当前目录开始。要使用该功能,请以href开头的/开头。

$menu .= '<li class='.$putclass.'><a href="/'.$row["slug"].'">'.$row['name'].'</a>';