【问题标题】:How does Zend parse URL in a front controller using mod_rewrite?Zend 如何使用 mod_rewrite 在前端控制器中解析 URL?
【发布时间】:2011-12-28 20:42:07
【问题描述】:

我无法弄清楚 Zend 框架如何控制路由。我实际上是在尝试创建自己的控制器/路由类,编写与 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 的吗?

【问题讨论】:

    标签: php zend-framework mod-rewrite


    【解决方案1】:

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

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

        print_r($_SERVER);
    

    【讨论】:

    • 因此,可以解析 $_SERVER['REQUEST_URI'],最终在提取主机部分之后。谢谢,这为我指明了正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2011-06-23
    • 2010-09-29
    • 2011-01-28
    相关资源
    最近更新 更多