给thinkphp5设置指定域名可以跨域请求,在行为监控的钩子里面操作即可

在tags.php的开始监听app_init可以监听到,所以可以添加行为监控。

<?php 
 return array (
  'app_init' => 
  array (
  ),
  'app_begin' => 
  array (
  0 => 'app\\behavior\\controller\\App',
  ),
  'module_init' => 
  array (
  ),
  'view_filter' => 
  array (
  ),
  'log_write' => 
  array (
  ),
  'app_end' => 
  array (
  ),
  
)
 ?>


然后在行为目录新增一个类:

<?php
/**
 * @email wei@alipay168.cn
 * @author 小韦
 * @link http://blog.alipay168.cn
 * @Date: 2020/3/23 20:13
 */

namespace app\behavior\controller;



use think\Response;

class App
{
    function run($params)
    {
       
       $refer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
        //可以跨域的白名单
        $domains = ['localhost'];
        if (!empty($refer) && in_array(parse_url($refer, PHP_URL_HOST),$domains)) {
            header('Access-Control-Allow-Origin: *');
            header('Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS, DELETE'); //支持的http 动作
            header('Access-Control-Allow-Headers: *');//设置支持的header
            //响应options这种试探类型请求
            if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
                    return header("HTTP/1.1 200 OK");
                    //不行就用下面的(下面的不行就用上面的或者exit('ok'))
                 return Response::create()->contentType("application/json")->code(200)->send();
            }
        }

    }
 }
 }


如果发现设置无效,一定要检查一下是不是https和http的请求问题,比如后台配置了https而前端用http请求,那么就会一直报错CORS ERROR,前端修改http为https即可。

评论/留言