我正在使用 CakePHP 2.2.0,我需要创建一个获取这种页面的路由:
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()