Zend Framework .htaccess重写规则

时间:2012-09-17 15:55:05

标签: php apache .htaccess zend-framework

我看过一个内容如下的.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?

1 个答案:

答案 0 :(得分:2)

检查所请求的文件/目录/符号链接是否存在的REQUEST_FILENAME条件。回答你的问题:

  

由于所有.php文件都是非零大小,那么apache如何知道php文件和非php文件之间的区别?

Apache不需要知道其中的区别。无论文件类型如何,应用程序的公用文件夹中的所有文件都按原样提供。所有Zend Framework文件和您的应用程序代码都存在于公用文件夹之外。

  

请求的URL是否会作为参数传递给/index.php,还是仅调用/index.php?

请求的URL仍然存在于$_SERVER['REQUEST_URI']等环境变量中,因此ZF(以及大多数框架)使用它来确定应用程序的哪个部分应该为请求提供服务。