Zend - 像mod_rewrite一样的其他域重定向

时间:2013-01-11 19:32:37

标签: zend-framework redirect url-rewriting zend-route

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

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

使用Apache重定向时,网址保持不变,例如在浏览器的地址栏上。我想在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',
    );
  }
}

但是我没有设法让它重定向到其他域,因为它显然只适用于现场路由(Haven没有找到指定域或完整URL的方法)。

我尝试过其他方法,例如:

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

这会进行重定向,但它会完全改变页面,从而产生一个全新的请求。

我怎样才能在ZF中实现这一点? 使用ZF1。

1 个答案:

答案 0 :(得分:0)

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

它无法想到这是一个好主意的任何情况。您提供的示例是将请求重写为远程CDN。通过这样做,您完全否定了首先使用CDN的所有优势(更好的性能,更低的带宽成本)。也许如果你可以解释你的用例,可能有更好的方法来实现你想要做的事情。