.htaccess добавление URL-слагов с тегами привязки - PullRequest
0 голосов
/ 27 декабря 2018

Я создаю блог на 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'

но когда я открываю одну страницу поста

, URL-адрес, который у меня есть, 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 code

ниже мой динамический код заголовка

$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 голосов
/ 27 декабря 2018

Вы хотите использовать absolute-path reference, чтобы браузер запускался из корневого каталога вашего сайта, а не из текущего каталога.Чтобы использовать это, начните href с ведущего /.

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