Как Concrete5 организует его абсолютные пути?

Меня попросили выяснить, как работает система Concrete5 для работодателя, и я ничего не могу понять.

У меня установлен Concrete5 в каталог на сервере с именем /realprofessionals, Когда система Concrete5 создает новые страницы, она дает им свои собственные абсолютные пути, например:

http://www.wmcpartners.com/realprofessionals/footer

Тем не менее, он на самом деле не сделал папку в /realprofessionals каталог называется footer, Так как это работает? Как http://www.wmcpartners.com/realprofessionals/footer быть рабочей ссылкой?

2 ответа

Решение

Краткий ответ: все запросы к страницам в действительности проходят через единственный файл index.php. Содержимое страницы хранится в базе данных, а не в файлах на сервере.

Длинный ответ: Concrete5 (и большинство основанных на PHP CMS) работают так: все запросы направляются через файл index.php. Эта маршрутизация обеспечивается некоторыми правилами mod_rewrite в файле.htaccess. Правила гласят: "для любого запроса на самом деле не переходите на эту страницу, вместо этого перейдите в index.php и передайте оставшуюся часть запрошенного пути в качестве параметров $_GET". Затем в коде index.php (или некотором другом коде, включенном в файл index.php) запрашиваемая страница определяется на основе пути, который был введен в параметры $_GET Apache (согласно правилу mod_rewrite в.htaccess), и соответствующий контент извлекается из базы данных.

Хранение контента в базе данных, в отличие от файлов на сервере, имеет несколько преимуществ. Например, вы можете повторно использовать один и тот же шаблон HTML - заголовок, нижний колонтитул, боковую панель - на каждой странице, и если вы измените шаблон, он будет автоматически отражен на всех страницах, на которых он используется. Кроме того, это облегчает перетасовку страниц вокруг и дает им любой URL, который вы хотите (например, без расширения.php в конце или /2010/11/date/based/paths/for/blog/posts).

Недостатком, конечно, является то, что каждый запрос требует много запросов к базе данных, но для большинства сайтов (без просмотра миллионов страниц) компромисс стоит того (и различные типы кэширования могут помочь снизить производительность).

Ответ Джордана превосходен, я хотел бы добавить, что вы, вероятно, не видите index.php в URL, потому что вы включили симпатичные URL-адреса (наберите 'pretty' в поле поиска concrete5, чтобы проверить это).

В любом случае, лучший способ программно добавить ссылку на внутренние страницы:

<a href="<?=$this->url('page-name');?>"> 
    page name 
</a>

Он работает как на локальном хосте, так и онлайн, с красивыми URL-адресами или без них.

(Для названия страницы перейдите на панель инструментов / полная карта сайта / имя страницы / свойства / пути и местоположение страницы.)

Другие вопросы по тегам