3

Zendフレームワークでは、MVCを使用して、ユーザーがhttp:// base / urlだけでなくhttp://base/url/index.phpに明示的にサーフした場合、システムは実際のベースURLがhttp://base/であると見なします。 url / index.php /に従って、システム内のすべてのURLを計算します。

したがって、コントローラーXXXとアクションYYYがある場合、リンクは
http://base/url/index.php/XXX/YYYになりますが、これはもちろん間違っています。

私は現在、index.phpに行を追加することでこれを解決しています:

$_SERVER["REQUEST_URI"]=str_replace('index.php','',$_SERVER["REQUEST_URI"]);

これを解決するための組み込みの方法がZFにあるかどうか疑問に思います。

4

6 に答える 6

5

Zend_Controller_Router_Route_Static(phew!)を使用して、ZFでそれを行うことができます。例:

上記のリンク先のマニュアルページを読んでください。かなり良い例がいくつか見つかります。

$route = new Zend_Controller_Router_Route_Static(
    'index.php',
    array('controller' => 'index', 'action' => 'index')
);
$router->addRoute('index', $route);

私はあなたのアプローチに完全に同意しないとは言えません。そうは言っても、5000かそこらの不利な点を指摘する人もいるかもしれません。それで頑張ってください。

于 2009-05-23T13:46:35.967 に答える
2

まあそれは本当にあなたがこれをどのように解決したいかに依存します。ご存知のように、Zend Frameworksはフロントコントローラーパターンに基づいて構築されており、/publicディレクトリ内のファイルを明示的に参照しない各リクエストはindex.phpにリダイレクトされます。したがって、基本的にこれをいくつかの方法で解決できます。

  1. .htaccessファイル(またはサーバー構成ディレクティブ)を編集して、要求を目的の要求に書き換えます。
    • RewriteRule(。* index.php)/ error / forbidden?req = $1//エラーコントローラーの禁止されたアクションに書き換えます。
    • RewriteRule index.php /index//リクエストをメインコントローラーとアクションに書き換えます
  2. karim79が提案するように、ブートストラッパーに静的ルートを追加します。
于 2009-05-23T14:01:43.937 に答える
2

mod_rewriteを使用します。このような何かがそれを行う必要があります:

RewriteRule ^index.php/(.*)$ /$1 [r=301,L]
于 2009-07-22T21:32:02.753 に答える
0

これを行うためにルートを使用するべきではないと思います。

これは一種の一般的な問題であり、この方法では解決できません。

.htaccessでそれを行う必要があります。これにより、エラーページやインデックスなど、目的の場所にユーザーをリダイレクトするためのより適切で簡単な方法が提供されます。

これがmod_rewriteのドキュメントページです

于 2009-05-23T14:17:23.533 に答える
0

ZendFrameworkを使用してこの問題に直面したことはありません。index.phpファイルにリンクしないでください。それでおしまい。また、アプリケーションのアドレスをユーザーに提供する場合は、http:// base /url/にアクセスするようにユーザーに指示してください。

ユーザーがhttp:// base / url /と入力すると、リクエストURIはbase / urlであり、.htaccessファイルはリクエストをindex.phpにルーティングしますが、リクエスト base/urlです。リクエストから「index.php」を削除する必要はありません。そこにないからです。

リンクやフォームなどのURLを生成しようとしている場合は、組み込みのurl()ビューヘルパーを使用してリンクを生成します。このような:

// in some view script
<a href="<?php
  echo $this->url( array('controller'=>'targetController','action'=>'targetAction') );
         ?>" >click</a>

リンクについて心配する必要はありません。ZendがURLを生成します。

于 2009-05-23T14:56:32.423 に答える
0

私がこれを見る方法は、PHPを利用したWebサイトがあり、ユーザーがhttp://site/index.aspxにアクセスした場合、404を送信するというものです。

index.phpは理論的には存在しますが、私のアプリケーションでは有効なURLではないため、この場合も404を送信します。

于 2009-07-22T16:51:36.407 に答える