2016-05-17 3 views
0

URLが特定のコントローラを呼び出す可能性のあるCIセットアップがあります。コントローラが存在しないキャッチオールコントローラに転送する必要があります。 switch文でdefaultのように並べ替えます。例:コードイグナイター:ルーティングされていないリクエストのデフォルトコントローラ

domain/real-controller   //<-- handled by controllers/Real-controller.php 
domain/another-real-controller //<-- controllers/Another-real-controller.php 
domain/foobar     //<-- no such controller; forwarded to a catch-all 

は私が再ルーティングを認識してんだけど、私はこのよう

$route['(:any)'] = 'catchall_controller' 

を行うことができない(おそらく)正当なコントローラにreqeustsをブロックします。

私はおそらく404ハンドリングでハッキーなことをすることができましたが、より良い方法があるかどうか疑問に思いました。 誰でも知っていますか?

+0

どうして '$ route ['default_controller'] = catchall_controller ';' – splash58

+0

これは 'www.domain'にホームページをロードするために使用されています。私は引数が渡​​されなければ、ホームページを読み込むキャッチオールのデフォルトコントローラを設定できると思います。ここで大声で考えてみてください。 – Utkanos

+0

Codeigniterのどのバージョンを使用していますか? – CodeGodie

答えて

0

あなたは$route['(:any)'] = 'catchall_controller'を使用できますが、あなたはroutes.phpファイルの最後に置く必要があります。

したがって、他のすべてのルータ/コントローラは、あなたのcatchall_controllerを持つ最後の行に行く前に実行することができます。

+0

これは、彼が探しているものではないかもしれないと思います。ポイントは、ルートのリスト全体を作成するのではなく、「デフォルト」または「すべてをキャッチする」ルートを1つだけ作成することです。 – CodeGodie

+0

ありがとうございます。私はコメント欄に同意します。 – Utkanos

0

codeigniter 2では(:any)はすべてのパラメータに対して機能しますが、codeigniter 3ではこれが変更されます。あなたのルートを次のように変更してください:

$route['(.*)'] = 'catchall_controller'; 
+2

これはなぜ機能しますか?説明を提供する。これは '$ route ['(:any)']'とど​​う違うのですか? – CodeGodie

+1

codeigniter 2で(:any)すべてのパラメータで動作しますが、codeigniter 3で動作します。これは変更です これを見て周線を渡すhttp://stackoverflow.com/questions/37111876/unlimited-parameters-get-last-one/ 37113315#37113315 –

+0

ありがとうございます。 – Utkanos

2

このコントローラーは「すべてをキャッチ」なので、404ページが行うことになります。その場合は、あなたのルートでこれを行うことができます:

$route['default_controller'] = 'welcome'; 
$route['404_override'] = 'catchall_controller'; 
$route['translate_uri_dashes'] = TRUE; 
+1

それでも404ヘッダーが送信されますか?私はトークンが渡されない限りホームページにバウンスする "ゲートキーパー"のデフォルトコントローラを持つことで問題を解決しました。しかし、+1。 – Utkanos

+1

指定しない限り、404ヘッダーは送信されません。 @codeGodieが指摘しているように – CodeGodie

+0

には、この解決策が有効です – manniL

関連する問題