php Zend / MVC 没有 mod_rewrite

Posted

技术标签:

【中文标题】php Zend / MVC 没有 mod_rewrite【英文标题】:php Zend / MVC without mod_rewrite 【发布时间】:2010-09-06 00:51:08 【问题描述】:

我在网上的许多博客中都看到过它,但我认为应该在这里讨论它。 当我们在 php 中有一个 MVC 框架(我对 ZEND 感兴趣)但我们的主机不提供 mod_rewrite 时,我们该怎么办? 有没有“捷径”?我们可以以任何方式转移控制权(以便在页面之间发生映射)吗?有任何想法吗? 谢谢你:-)

【问题讨论】:

【参考方案1】:

mod_rewrite 在当今的托管环境中几乎是必不可少的。但不幸的是,并不是每个人都明白这一点。

许多大型 php 程序(我在想 magento,但大多数都能应付)在 mod_rewrite 不可用时有一个漂亮的 url 后备模式。

网址最终看起来像 www.site.com/index.php?load-this-page

他们必须运行一些魔法来从 $_GET 变量中获取变量名,并将其用作要执行的模块/功能的选择器。

在相关说明中,我在使用 # 的新 facebook 网站中看到了很多混乱的 URL。所以链接看起来像 www.new.facebook.com/home.php#/inbox/ 显然我们不应该看到它,但它表明它们可能正在解析 $_SERVER['REQUEST_URI'] 变量。

【讨论】:

【参考方案2】:

Zend 框架应该在没有mod_rewrite 的情况下工作。如果您可以忍受您的 URL:s 看起来更像“/path/to/app/index.php/controller/action”。如果你有 mod_rewrite,你可以取消“index.php”位,但它也应该可以工作。

只需设置路由以接受 index.php 部分。

【讨论】:

【参考方案3】:

如果您能找到一种非 mod_rewrite 方式将所有请求重定向到 index.php(或您的 init 脚本所在的任何位置),您可以如上所述,使用“REQUEST_URI”来获取域之后的地址部分然后根据需要对其进行解析并使请求执行您想要的操作。这就是 Wordpress 的工作方式(允许,使用 mod_rewrite)。只要您可以将请求重定向到您的索引页面,同时保留相同的 URI,您就可以做您需要做的事情来处理请求。

【讨论】:

【参考方案4】:

好的,我的判断:-):我已经成功地使用了没有 mod_rewrite 的 zend,就像你们所说的 site/index.php/controller/action。在发这个之前我就知道了。我还在网上发现了一种将 404 页面“推送”到 index.php 的技术,因此什么不是资源(例如 CSS、图像等)可以到达那里,但有一个例外:POST 值。 所以我决定下次必须在特定服务器上创建应用程序时,礼貌地请求 mod_rewrite。如果管理员无法提供,请与我的老板交谈,或者如果是我,请切换供应商。 一般来说,有时 PHP 市场如此分散(php4、php5、php6、mod_rewrite、mod_auth、mod_whatever)令人遗憾,但这是另一回事了……

【讨论】:

【参考方案5】:

Drupal 的重写规则翻译

http://example.com/path/goes/here

进入

http://example.com/index.php?q=path/goes/here

...并且有逻辑来决定生成哪种类型的 URL。如果您可以忍受丑陋的 URL,这将让您保留单个前端控制器的所有逻辑,而无需依赖 URL 重写。

【讨论】:

以上是关于php Zend / MVC 没有 mod_rewrite的主要内容,如果未能解决你的问题,请参考以下文章

原创Zend Framework 2框架之MVC

如何在 Zend/MVC 的视图文件中包含 PHP 文件?

MVC + 服务层在 zend 或 PHP 中很常见吗?

如何在没有页码的情况下创建php分页[保留]

Ubuntu18.04下基于apache2部署Zend Framework 3 MVC框架含BUG/问题解决)

如何配置Zend Di