【问题标题】:Zend - other-domain redirect like mod_rewriteZend - 其他域重定向,如 mod_rewrite
【发布时间】:2013-01-11 19:32:37
【问题描述】:

我使用 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。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 回复。成本:您的意思是对 CDN 完成的请求必须“返回”到原始服务器,然后才能交给用户,因此从 CDN 向用户提供服务的可能好处没有发生?关于。我想要做什么 - 我在 CDN 中静态托管家庭,但显然不希望家庭 URL 显示为 CDN 的。是否有可能在没有性能损失的情况下将其结合起来?
    • 我假设“主页”是指主页。如果用户来到您的服务器查看主页,无论您设置什么代理,您都不会在 CDN 中托管主页。您可能想查看“来源拉取”CDN,它本机支持您尝试在代码中设置的内容。但是,如果您希望 CDN 托管您的主页,则必须将整个域的 DNS 指向 CDN。要么全有,要么全无。
    • 谢谢蒂姆。我终于也将主 HTML 移动到我的应用程序服务器,只留下静态元素由 CDN 提供服务。将衡量影响(如果有)。
    猜你喜欢
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2016-05-18
    • 1970-01-01
    相关资源
    最近更新 更多