Zend如何使用mod_rewrite解析前端控制器中的URL?

时间:2011-11-14 17:31:49

标签: php zend-framework mod-rewrite

我无法弄清楚Zend Framework如何控制路由。我实际上是在尝试创建自己的控制器/路由类,编写与Zend推荐的相同的代码.htaccess重写为位于网站根目录的index.php:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

我不明白的是最后一行。它没有捕获组和$变量。在index.php中,我无法捕获$ _GET中的任何内容,这是空的。唯一可行的方法是:

RewriteRule ^(.*)$ index.php?uri=$1 [NC,L]

然后解析$ _GET ['uri'],对我而言,它将采用“controller / action / param1 / param1value”的形式。

但是绕过这个并不使用'uri'变量会很好。在Zend项目中,这是有效的。有人可以解释一下Zend如何通过这种重写来解析URL吗?

1 个答案:

答案 0 :(得分:4)

最后一条规则将文件实际不存在的所有请求(请参阅上一条规则)转发到index.php,后者加载Zend Framework并处理请求。如果你追踪Zend用它做什么,你最终会发现你通过Front Controller获得了Controller / Request / Http.php,它使用了几个$_SERVER变量来确定请求的用途。 / p>

我建议您编写自己的index.php并检查$_SERVER中的元素并查看Controller / Request / Http.php中的代码。

    print_r($_SERVER);