我在网络上的许多博客中都看到过它,但我认为应该在这里讨论它。当我们在 PHP 中有一个 MVC 框架(我对 ZEND 感兴趣)但我们的主机不提供 mod_rewrite 时,我们该怎么办?有没有“捷径”?我们可以以任何方式转移控制权(以便在页面之间发生映射)吗?有任何想法吗?谢谢 :-)
5 回答
Zend 框架应该在没有mod_rewrite
. 如果您可以忍受您的 URL:s 看起来更像“/path/to/app/index.php/controller/action”。如果您有 mod_rewrite,您可以取消“index.php”位,但它也应该可以使用。
只需设置路由以接受 index.php 部分。
好的,我的判断 :-):我已经成功使用了没有 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)令人遗憾,但这是另一回事了……
mod_rewrite 在当今的托管环境中几乎是必不可少的。但不幸的是,并不是每个人都明白这一点。
当 mod_rewrite 不可用时,许多大型 php 程序(我在想 magento,但大多数可以应付)都有一个漂亮的 url 后备模式。
URL 最终看起来像 www.site.com/index.php?load-this-page
他们必须运行一些魔法来从 $_GET 变量中获取变量名,并将其用作要执行的模块/功能的选择器。
在相关说明中,我在使用 #. 所以链接看起来像 www.new.facebook.com/home.php#/inbox/ 显然我们不应该看到它,但它表明它们可能正在解析 $_SERVER['REQUEST_URI'] 变量。
如果您可以找到一种非 mod_rewrite 方式将所有请求重定向到 index.php(或您的 init 脚本所在的任何位置),则可以如上所述,使用“REQUEST_URI”获取域之后的地址部分,然后解析随心所欲,并使请求做你想做的事。这就是 Wordpress 的做法(当然,使用 mod_rewrite)。只要您可以将请求重定向到您的索引页面,同时保留相同的 URI,您就可以做您需要做的事情来处理请求。
Drupal 的重写规则翻译
http://example.com/path/goes/这里
进入
http://example.com/index.php?q=path/goes/here
...并且具有决定生成哪种 URL 的逻辑。如果您可以忍受丑陋的 URL,这将使您保持单个前端控制器的所有逻辑不变,而无需依赖 URL 重写。