2009-05-23 7 views
3

Zendフレームワークでは、MVCを使用して、ユーザがhttp://base/urlの代わりにhttp://base/url/index.phpに明示的にサーフィンした場合、システムは実際のベースURLをhttp://base/url/index.php/と考え、システム内のURLユーザがindex.phpにサーフィンしたときにどのように解決するか

コントローラーXXXとアクションYYYがある場合、リンクは
http://base/url/index.php/XXX/YYYですが、間違いです。

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

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

これを解決するZFに組み込まれている方法がある場合、私は疑問に思って。

あなたが Zend_Controller_Router_Route_Static(あー!)、例を使って、ZFでそれを行うことができます

答えて

5

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

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

あなたのアプローチに完全に同意できないとは言えません。それは、他の人が5000ほどの短所を指摘するかもしれないということです。それで幸運。

2

これは実際どのように解決したいかによって異なります。知っているように、Zend Frameworksは、/ publicディレクトリのファイルを明示的に参照しない各リクエストがindex.phpにリダイレクトされるフロントコントローラパターンをベースにしています。だから、基本的には、いくつかの方法でこの問題を解決することができます:

  1. 編集.htaccessファイル(またはサーバの設定ディレクティブ)を所望の要求にリクエストを書き換える:。
    • のRewriteRule(* index.phpを)/ error/forbidden?req = $ 1 //エラーコントローラの禁止された動作に書き換えます。 karim79により示唆されるよう
    • のRewriteRuleのindex.php /インデックス//メインコントローラとアクションにリクエストを書き換え
  2. はあなたのブートストラップの静的ルートを追加します。
0

私はあなたがこれを行うためのルートを使うべきではないと思います。

これは、このように解決すべきではない一般的な問題のようなものです。

あなたはより良い&をあなたが好きな場所、エラーページ、またはインデックスにリダイレクトするためのより良い方法を提供する.htaccessでそれを行う必要があります。ここで

は、私はZend Frameworkのを使用してこの問題に直面したことがありません mod_rewrite

0

のドキュメントページです。 index.phpファイルにはリンクしないでください。それでおしまい。あなたは、ユーザーにアプリケーションのアドレスを与えているときに、ユーザーがURIがベース/ URLとあなたの.htaccessファイルの敗走インデックスへの要求であるhttp://base/url/彼女の要求を入力したときに、ちょうどhttp://base/url/

に行くためにそれらを教えてください。phpですが、リクエストはです。ベース/ URLです。リクエストから 'index.php'を削除する必要はありません。それはそこにないからです。

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

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

リンクを心配しないでください。 ZendはURLを生成します。

+0

あなたは1000%の権利が、問題は、ユーザーが、私が発見し、URLにindex.phpをを追加するために、いくつかの回を傾向があることです。これが私がこの問題について学んだ方法です。 –

0

私はこれを見ての方法は、私はPHPを搭載し、ウェブサイトを持っており、ユーザーがhttp://site/index.aspxに行くならば、私は404

index.phpのは理論的には存在しないにもかかわらず、それはありませんを送るだろうということです私のアプリケーションでは有効なURLなので、この場合も404を送信します。

+1

彼を実際のURLに「リダイレクトする」方がよりフレンドリーではありませんか? –

2

mod_rewriteを使用してください。このような何かにそれを行う必要があります。

RewriteRule ^index.php/(.*)$ /$1 [r=301,L]