我看过一个内容如下的.htaccess文件
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
据我所知,Rewrite条件表示如果请求的url用于非零大小的文件,或符号链接或目录,则不执行任何操作。这是由
RewriteRule ^.*$ - [NC,L]
,表示如果上述条件为真,则在此处停止处理;否则调用/index.php
并使用RewriteRule ^.*$ /index.php [NC,L]
完成。
我的怀疑是,
1.在教程(Survive the deep end)中,我正在阅读,说:
即如果URL引用文件(大小大于零),目录或符号链接。这样可以确保您的javascript,css和其他非PHP文件可以直接提供,即使它们集中在其他地方并仅由符号链接引用。
由于所有.php文件都是非零大小,那么apache如何知道php文件和非php文件之间的区别?
2.请求的url是否会作为参数传递给/index.php,还是仅调用/index.php?
答案 0 :(得分:2)
检查所请求的文件/目录/符号链接是否存在的REQUEST_FILENAME条件。回答你的问题:
由于所有.php文件都是非零大小,那么apache如何知道php文件和非php文件之间的区别?
Apache不需要知道其中的区别。无论文件类型如何,应用程序的公用文件夹中的所有文件都按原样提供。所有Zend Framework文件和您的应用程序代码都存在于公用文件夹之外。
请求的URL是否会作为参数传递给/index.php,还是仅调用/index.php?
请求的URL仍然存在于$_SERVER['REQUEST_URI']
等环境变量中,因此ZF(以及大多数框架)使用它来确定应用程序的哪个部分应该为请求提供服务。