私は CakePHP 2.2.0 を使用しており、この種のページを取得するルートを 1 つ作成する必要があります。
http://www.example.com/users/mypage.php
Cakephp のドキュメントに従って、このページを見つけました: http://book.cakephp.org/2.0/en/development/routing.html#file-extensions
私が使用しなければならないことを読んだ場所:
Router::parseExtensions('php');
この行をroutes.phpファイル(ルートの上)に追加し、このルートを追加しました:
Router::connect('/users/mypage.php', array('controller' => 'users', 'action' => 'mypage'));
そこで、UsersController 内にこのアクションを追加しました。
残念ながら、 www.example.com/users/mypage
正常に動作するように送信されたリクエストのみ (mypage アクションが呼び出されます) を試してみるwww.example.com/users/mypage.php
と、404 not found エラーが発生します。
ドキュメントにあるように、私はその理由を本当に理解していません:
これにより、一致するファイル拡張子をすべて削除し、残っているものを解析するようルーターに指示します。
したがって、それはまさに私が必要とするものです。ユーザーが /users/mypage.php (拡張子付き) を入力したときにmypageアクションが呼び出されることを (このアクションに対してのみ)解釈する必要があります。
他には何も追加しませんでした。AppController はデフォルトであり、私の UsersController には mypage() メソッドしかありません。
NGINX に問題があるかどうかはわかりませんが、以下にドメインの構成を書きます。
server {
listen 80;
server_name www.example.com;
root /home/users/example.com/www/app/webroot/;
access_log /home/users/example.com/log/access.log;
error_log /home/users/example.com/log/error.log;
location / {
index index.php index.html;
try_files $uri $uri/ /index.php?$uri&$args;
}
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
質問は明確だと思います。リクエストに拡張子がある場合、特定のコントローラーのアクションにリクエストをルーティングする方法は?
私は欲しい:
www.example.com/users/mypage.php ==> to UsersController mypage()