我使用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。
答案 0 :(得分:0)
mod_rewrite规则上的[P]
标志对我来说是一个新标志,但是从文档看起来它告诉Apache将请求代理到给定的URL(使用mod_proxy)。因此它实际上在内部向该URL发出另一个请求并将其提供给用户,这不是重定向。 ZF中的等价物是将请求路由到使用Zend_Http_Client
向远程服务器发出另一个请求的操作。
它无法想到这是一个好主意的任何情况。您提供的示例是将请求重写为远程CDN。通过这样做,您完全否定了首先使用CDN的所有优势(更好的性能,更低的带宽成本)。也许如果你可以解释你的用例,可能有更好的方法来实现你想要做的事情。