Как Concrete5 организует свои абсолютные пути? - PullRequest
1 голос
/ 19 ноября 2010

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 19 ноября 2010

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

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

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

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

1 голос
/ 10 июня 2014

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

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

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

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

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

...