2009-03-09 12 views
3

私のZend Frameworkアプリケーションで奇妙な動作が発生しています。Zend Framework:奇妙なURLの書き換え動作

私はこのURLを実行して、インデックスコントローラが1234567890アクションを実行するようにしたいと考えています。

Message: Invalid controller specified (4567890) 

を、ページ上にある不思議なすべてのURLは現在リンクされています:

http://hello.com/index/1234567890?test=http%3A%2F%2Fworld.com%2Findex.php 

しかし私は、このような例外を取得

http://hello.com/index.php/index/1234567890 

の代わりに:

http://hello.com/index/1234567890 

index.phpの文字列th URLに誤って挿入された不正な文字列に9文字が含まれている場合、間違ったコントローラ名を取得するためにインデックス/ 123 4567890文字列の切り捨てと同じ番号になります。

もう1つのことは、挿入されたindex.phpが、例のURLエンコードされたgetパラメータでindex.phpと相関していることです。

どうしたのですか?それはZendのバグですか?または私は何か間違っているのですか?

これは私の.htaccessです:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /index.php [NC,L] 
+0

mod_rewriteのログ機能を有効にしてください(RewriteLogLebelディレクティブを参照)。 – Gumbo

答えて

0

MultiViewsは、この動作を引き起こす可能性があります。これを無効にしてください:

Options -MultiViews 
+0

私は自分のプロジェクトエイリアスのOptions AllをOptions All -MultiViewsに変更しました。私は彼らがとにかく有効にされていないと思う。 –

+0

この表記が許可されているかどうかはわかりません。だから2つの宣言に分割してみてください。 – Gumbo

+0

内部処理を確認するためにRewriteLogLevelを試しましたか? – Gumbo

3

あなたは、このように私は自分のローカルホストにオーバーさまよっとあなたのURLに打撃を与えたデバッグしようとした方法で多くを入れていません。彼らの両方が同じことをやっていた

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php 

そして

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /index.php [NC,L] 

:低と私は同じことをして見よ、私は2つの異なるmodrewrite方法を試してみました。かなりの時間を費やしてurlを試してみて、リクエストパラメータが私のエラーページのように見えたら、Zend Frameworkのデフォルトのルーティングパターンに大きな不具合があるか、あなたのmodrewriteがurlにリクエストを送信しています。

メインのindex.phpファイルをmain.phpに変更して、それぞれmodrewriteに入れて、うまくいきました。メインの.phpをURLに入れても、それを壊してしまうことはありません。

index.php(あなたのブートストラップに書き込まれ、それを含む)の名前をmain.phpに変更するか、あなたが喜んで何をしているかをあなたのmodrewriteに反映させると、あなたはすべて設定されるべきです!

幸運を祈る!