somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【apache】フロントコントローラー以外のリクエスト先がないとき【Zendframework】

PHPフレームワークでは、 .htaccessmod_rewriteモジュールを用いて リクエストをフロントコントローラーに対するアクセスとし、 URLをパラメーターとして扱うことでリクエストを各コントローラーにさばいています。

また、Zendframeworkでは、 リクエストに対するコントローラーが無い場合、 IndexControllerが存在しているとそこにアクセスされるようになります。

.htaccessの例 (http://framework.zend.com/manual/ja/zend.controller.router.html)

RewriteEngine on

RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php

⇒末尾が上記の拡張子以外の場合、index.phpに変更 あるいは (推奨)

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]

RewriteCond %{REQUEST_FILENAME} -l [OR]

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]

⇒ファイルが存在しサイズ有、またはリンク、またはディレクトリの場合変更しない ちなみに自分のところは1番目でした。

この設定のときに、 「拡張子指定したものがなかった場合、IndexControllerへのリクエストが発生します」 ファイルが存在しない文だけhttpdが立ち上がります。 画像をキチンとアップロードすればいいんです。

しかし、納期までの時間が無かった+影響範囲がファイル読み込み場所全てだったので、下記設定で回避しました。

RewriteEngine on

RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php

RewriteCond %{REQUEST_FILENAME} -!f

RewriteRule \.(js|ico|gif|jpg|png|css|html)$ no_file

⇒拡張子あり以外は、index.phpへ ⇒拡張子ありかつ、ファイルが存在しない場合、ファイルなしのリクエストにする 気持ち悪いですが、これでhttpd立ち上がり防止になりました。

htaccessの参考:

 http://webtech.akijapan.com/htaccess/rewrite.phtml

 http://webings.net/htaccess/

 http://blog.dawgsdk.org/weblog/archives/411011