我的问题非常基础:CMS的基本思想是没有真正的内容文件,但在最简单的情况下,单个文件 index.php,:
关于1)服务器如何知道 index.php 负责每个请求?它只是htaccess吗? WordPress的:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
这是一切吗?每个不存在的文件都被解释为内容的现有文章?所以我必须在index.php里面检查一个被遗忘的图像 pineapple.png 是什么?
关于2)服务器如何将名称 index.php 重写为 / fruit / pineapple(.php)或 ?cat = fruit& sort = pineapple ?这不能是301重写,服务器必须将index.php重新变为请求的URL。
答案 0 :(得分:0)
问题1 :是的,RewriteEngine负责将每次调用路由到 index.php 。
编辑:实际上,不是每次调用,如果调用引用现有资源,则!-f
!-d
行会测试。如果它们不存在,它只会路由到index.php。这允许服务器在没有index.php帮助的情况下发送现有文件(例如图像和其他包含的文件,如js和css文件)。
所以,如果我请求domain.com/fruit/pineapple.jpg
,并且该图像存在,我会得到它。如果它不存在,则会调用index.php,它可能会生成一个漂亮的 404页面。
问题2 :不,这不是由 APACHE 处理的,它由 index.php 本身照顾,通过检查$ _SERVER ['REQUEST_URI'],并将其内容与一组预定义路由相对应。 这称为 URL路由。每个CMS都有自己的方法,并且还有一些PHP库(或您喜欢的任何其他服务器端语言)。
的更长解释