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]フラグは私にとっては新しいものですが、ドキュメントからは、リクエストを指定されたURLにプロキシするようにApacheに指示しているようです(mod_proxyを使用)。したがって、実際にはそのURLに対して内部で別のリクエストを行い、それをユーザーに返します。リダイレクトではありません。ZFでの同等の機能はZend_Http_Client、リモートサーバーに別の要求を行うために使用するアクションに要求をルーティングすることです。

これが良い考えになるような状況は考えられません。あなたが与えた例は、リモートCDNへのリクエストの書き換えです。これを行うことにより、そもそもCDNを使用することのすべての利点(パフォーマンスの向上、帯域幅のコストの削減)を完全に無効にすることができます。おそらく、ユースケースを説明できれば、やろうとしていることを達成するためのより良い方法があるかもしれません。

于 2013-01-11T22:13:42.687 に答える