次の場合に処理できるようにした時のメモ
-
%2Fをパラメータに含む (例: http://---domain---/pages/a%2Fb%2Fc) -
/をパラメータに含む (例: http://---domain---/pages/a/b/c) a/b/cという値を action で受け取る
⇒ Apacheの.confと、CakePHPのルーティングを設定*
CakePHP2.3.9を利用しています。
Apache
ApacheはデフォルトでURLに%2Fを含むと404を返すとのことでAllowEncodedSlashesを有効にする。
AllowEncodedSlashes On
→ これでURLに%2Fを含んでいても404を返さず、処理がCakePHPまで行われる。
参考: http://blog.flatlabs.net/20110307_230227/
CakePHP 2.1以降
/を含むパラメータは**で利用できる。
Router::connect(
'/pages/**',
array(
'controller' => 'pages',
'action' => 'index',
)
);
public function index($param) {
}
http://---domain---/pages/a%2Fb%2Fc
http://---domain---/pages/a/b/c
→ a/b/c という一塊の値が pages コントローラ index アクション $param に渡ってくる。
※ルーティングを設定しないと pages コントローラの a アクションに b と c という2つの値が渡ってくる。
参考: http://book.cakephp.org/2.0/ja/development/routing.html#connecting-routes