1

我被要求弄清楚 Concrete5 系统如何为雇主工作,但我无法弄清楚。

我已将 Concrete5 安装到服务器上名为/realprofessionals. 当 Concrete5 系统创建新页面时,它会为它们提供自己的绝对路径,例如:

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

但是,它实际上并没有在/realprofessionals名为footer. 那么这是如何工作的呢?http://www.wmcpartners.com/realprofessionals/footer如何成为有效链接?

4

2 回答 2

2

简短的回答:所有页面请求实际上都通过唯一的 index.php 文件。页面内容存储在数据库中,而不是服务器上的文件中。

长答案: Concrete5(以及大多数基于 PHP 的 CMS)的工作方式如下:所有请求都通过 index.php 文件进行路由。此路由由 .htaccess 文件中的一些 mod_rewrite 规则强制执行。规则说“对于任何请求,实际上不要转到该页面,而是转到 index.php 并将请求路径的其余部分作为 $_GET 参数传递”。然后在 index.php 代码(或 index.php 文件中包含的一些其他代码)中,请求的页面是根据 Apache 放入 $_GET 参数的路径确定的(根据 . htaccess),并从数据库中检索适当的内容。

与服务器上的文件相比,将内容存储在数据库中有几个优点。例如,您可以在每个页面上重复使用相同的 html 模板 - 页眉、页脚、侧边栏 - 如果您更改模板,它将自动反映在使用它的所有页面上。此外,它还可以更轻松地打乱页面并为它们提供您想要的任何 URL(例如,末尾没有“.php”扩展名,或 /2010/11/date/based/paths/for/blog/posts)。

缺点当然是每个请求都需要许多数据库查询,但对于大多数网站(那些没有无数页面浏览量的网站)来说,这种权衡是值得的(各种类型的缓存可以帮助降低性能损失)。

于 2010-11-19T20:22:27.307 回答
1

Jordan 的回答非常好,我要补充一点,您可能在 url 中看不到 index.php,因为您启用了漂亮的 URL(在具体 5 的搜索框中输入“pretty”进行检查)。

无论如何,以编程方式将链接添加到内部页面的最佳方法是:

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

它适用于本地主机和在线,有或没有漂亮的 URL。

(对于页面名称,请转到仪表板/完整站点地图/页面名称/属性/页面路径和位置。)

于 2014-06-10T09:58:32.917 回答