thinkcmf做的网站,为何打开API显示的是“恭喜您,API访问成功”

本文介绍了一个使用ThinkCMF框架搭建的网站如何正确配置Nginx伪静态规则以实现API接口访问。通过具体的Nginx配置示例,展示了如何针对/api路径进行重写规则设置,确保API接口能够正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

thinkcmf做的站点,打开API接口,显示恭喜您,API访问成功。这是在为nginx伪静态没做或者做了伪静态,请示的方式不对。

正确的伪静态设置应该是:

location /api/ {
                index  index.php index.html index.htm;
                #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
                if (!-e $request_filename)
                {
                #若是子目录则使用下面这句,将subdir改成目录名称即可。
                rewrite ^/api/(.*)$ /api.php?s=$1;
                 }
        }

正确的API接口应该是:http://www.testweb.com/api/portal/lists/getTestList

server
    {
        listen 80;
        server_name  www.testweb.com;
        index index.html index.htm index.php;
        root /data/www/testweb/public;

        location / {
          index  index.php index.html index.htm;
          #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
          if (!-e $request_filename)
          {
             #地址作为将参数rewrite到index.php上。
             rewrite ^/(.*)$ /index.php?s=$1;
             #若是子目录则使用下面这句,将subdir改成目录名称即可。
             #rewrite ^/subdir/(.*)$ /subdir/index.php?s=$1;
          }
        }

        location /api/ {
                index  index.php index.html index.htm;
                #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
                if (!-e $request_filename)
                {
                #若是子目录则使用下面这句,将subdir改成目录名称即可。
                rewrite ^/api/(.*)$ /api.php?s=$1;
                 }
        }
        location ~ \.php(.*)$ {
            fastcgi_pass   unix:/usr/local/php/var/run/php-cgi.sock;
            fastcgi_index  index.php;
            #fastcgi_split_path_info ^(.+\.php)(.*)$;
            #fastcgi_param   PATH_INFO $fastcgi_path_info;
            fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|json|swg)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            #deny all;
        }

        access_log  /data/www/nginx_log/testweb.log access;
}

### ThinkCMF 中设置 API 路由 在ThinkCMF中,为了实现RESTful风格的API接口,可以通过配置路由来简化URL结构并提高可读性和维护性。具体操作如下: #### 定义API路由规则 对于API路由的设计遵循REST原则[^1],通常会创建专门用于API访问的模块或控制器。通过`route.php`文件定义具体的路由映射关系。 ```php // application/route.php 文件内添加如下代码片段 use think\facade\Route; Route::group('api', function () { Route::get('users/:id', 'Api/User/getUserById'); // 获取单个用户信息 Route::post('users', 'Api/User/createUser'); // 新建用户 }); ``` 此段代码展示了如何利用`Route::group()`函数将一组具有相同前缀的路由集中管理,并指定了GET请求获取指定ID用户的详情以及POST请求用来新增加一条记录到数据库表里[^2]。 #### 使用中间件增强安全性与功能扩展 如果希望对某些特定路径实施额外的安全措施或是预处理逻辑,则可以在路由声明时引入相应的中间件[^3]: ```php Route::resource('articles', 'Article')->middleware(['auth.api']); ``` 上述例子表明当涉及到文章资源的操作时都会先经过名为`auth.api`的认证过程再执行实际的动作处理器。 #### 自定义异常处理机制优化用户体验 考虑到可能出现的各种意外情况,比如请求了一个不存在的资源链接,应该给予恰当友好的提示而不是直接暴露服务器内部错误给客户端[^5]。这可通过覆盖基础控制类中的魔术方法`\_\_call`来自定义未匹配任何已知动作的行为响应方式: ```php namespace app\Controller; use think\Controller; class BaseController extends Controller{ public function __call($method, $args){ return json([ "status"=>false, "message"=>"The requested resource does not exist." ], 404); } } ``` 以上就是关于在ThinkCMF框架下设定API路由的一些基本指导说明及其实践案例展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值