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

Php Zend如何使用mod_rewrite解析前端控制器中的URL?,php,zend-framework,mod-rewrite,Php,Zend Framework,Mod Rewrite,我不知道Zend框架是如何控制路由的。实际上,我正在尝试创建自己的控制器/路由类,编写了与Zend reccomends for.htaccess相同的代码,以重写到位于网站根目录中的index.php: RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*

我不知道Zend框架是如何控制路由的。实际上,我正在尝试创建自己的控制器/路由类,编写了与Zend reccomends for.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中,我无法捕获$\u GET中的任何内容,它是空的。唯一可行的方法是:

RewriteRule ^(.*)$ index.php?uri=$1 [NC,L]
然后解析$_GET['uri'],对我来说,它的格式是“controller/action/param1/param1value”


但最好不要使用“uri”变量,而是避开这个问题。在Zend项目中,这很有效。有人能解释一下Zend是如何用这种重写方式解析URL的吗?

最后一条规则将文件实际上不存在的所有请求(请参见前面的规则)转发到index.php,index.php加载Zend框架并处理请求。如果您跟踪Zend对它所做的操作,最终会发现您通过前端控制器访问Controller/Request/Http.php,前端控制器使用几个
$\u服务器变量来确定请求的目的

我建议您编写自己的
index.php
,检查
$\u服务器中的元素,并查看Controller/Request/Http.php中的代码

    print_r($_SERVER);

因此,在提取主机部分之后,可以解析$\u服务器['REQUEST\u URI']。谢谢,这为我指明了正确的方向。