PHP — Вопросы по динамическим ссылкам

#php #html #dynamic

#php #HTML #динамический

Вопрос:

Я тестировал динамическое отображение ссылок на страницы с помощью php, и я смог добиться этого, используя следующий код в моем index.php:

     <a href="index.php">Home</a>
<a href="index.php?page=about">About</a>
<a href="index.php?page=contact">Contact</a>
<a href="index.php?page=news">news</a>


<div class="content">
    <?php

        if( !empty($_GET['page']) ) {

            $allPages = scandir('pages', 0);
            unset($allPages[0], $allPages[1]);
            $page = $_GET['page'];

            if( in_array($page . '.inc.php', $allPages) ) {

                include('pages' . '/' . $page . '.inc.php');
            } else {
                echo "page not found";
            }
        } else {
            include('pages' . '/home.inc.php');
        }






    ?>
</div>
  

В приложении вы также найдете изображение моей структуры каталогов.

У меня есть два вопроса:

  1. Поскольку каждый элемент в URL отображается с ?page=contact , могу ли я скрыть это с помощью файла .htaccess?
  2. Если бы вы были на этом главном index.php страница и попытался написать index.php /anythingElse Я хочу, чтобы он вернулся к простому index.php, но каждый раз, когда я пытаюсь включить (index.php ) Я генерирую бесконечный цикл, и страница вылетает. Как я могу этого избежать?

введите описание изображения здесь

Комментарии:

1. к пункту 1: откуда веб-сервер должен знать, куда вас перенаправить, если вы не указали ?page=contact ? По крайней мере, это должно быть что-то вроде index/contact

2. Вы действительно хотите / нуждаетесь в написании собственного маршрутизатора? Почему бы не использовать один из многих существующих?

3. Привет, Джефф, вовсе нет. Новичок в PHP, поэтому я просто проверяю некоторые теории. Можете ли вы уточнить?

Ответ №1:

Вы не можете скрыть строку запроса в URL, но вы можете добавить правила .htaccess, чтобы переписать URL во что-то более красивое. Например, index.php?page=test может стать индексом /тестом.

 #redirect /index.php?page=test to /index/test
RewriteCond %{THE_REQUEST} /page.php?query=([^s] ) [NC]
RewriteRule ^. $ /page/%1? [L,R]

#rewrite /index/test to /index.php?page=test
RewriteRule ^page/(.*)$ page.php?query=$1 [L]