0

我使用 mod_rewrite 的 RewriteRules 在 apache 上有几个基本的重定向。我想使用 Zend Framework 以编程方式进行这些重定向。这些重定向可能包括不同的域。例如

RewriteRule ^/xmas(.*) http://mycdn.com/things/xmas$1 [P]

当使用 Apache 重定向时,url 保持不变,例如在浏览器的地址栏上。我想在 ZF 中模仿这种行为,但找不到其他领域的方法。

我可以通过扩展Zend_Controller_Router_Route、扩展match()方法,然后返回一个包含模块、控制器、操作等字段的数组来进行现场重定向。

class My_Route extends Zend_Controller_Router_Route
{
// ...

  public function match($path)
  {
    // ...
    return
      array(
        'module' => 'default',
        'controller' => 'mycontroller',
        'action' => 'index',
    );
  }
}

但是我还没有设法使它适用于重定向到其他域,因为它显然只适用于站点内路由(也没有找到在规范中指定域或完整 url 的方法)。

我尝试了另一种方法,例如:

$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$r->gotoUrl("http://otherdomain.com/some-stuff-to-redirect-to")->redirect();

这会进行重定向,但它完全改变了发出全新请求的页面。

我如何在 ZF 中实现这一点?使用 ZF1。

4

1 回答 1

0

mod_rewrite 规则上的[P]标志对我来说是一个新标志,但从文档看来,它告诉 Apache 将请求代理到给定的 URL(使用 mod_proxy)。因此,它实际上在内部向该 URL 发出另一个请求并将其返回给用户,这不是重定向。ZF 中的等价物是将请求路由到用于Zend_Http_Client向远程服务器发出另一个请求的操作。

它想不出在任何情况下这都是一个好主意。您给出的示例是将请求重写到远程 CDN。通过这样做,您首先完全否定了拥有 CDN 的所有优势(更好的性能,更低的带宽成本)。也许如果您可以解释您的用例,可能会有更好的方法来实现您正在尝试做的事情。

于 2013-01-11T22:13:42.687 回答