您的位置:首页 > 房产 > 家装 > 晋城网站建设开发_互联网媒体广告公司_广州网站营销seo_seo教程技术资源

晋城网站建设开发_互联网媒体广告公司_广州网站营销seo_seo教程技术资源

2024/12/23 12:05:11 来源:https://blog.csdn.net/nnmmbb/article/details/143691384  浏览:    关键词:晋城网站建设开发_互联网媒体广告公司_广州网站营销seo_seo教程技术资源
晋城网站建设开发_互联网媒体广告公司_广州网站营销seo_seo教程技术资源

解决过程主要有两个步骤。

1.nginx配置允许跨域

在你部署的网站对应的端口配置文件里设置,我的目录结构是这样的:

server {
        listen        8080;
        server_name  localhost;
        root   "D:/phpstudy_pro/WWW/admin/landpage_server/public";
        location / {
            index index.php index.html error/index.html;
            error_page 400 /error/400.html;
            error_page 403 /error/403.html;
            error_page 404 /error/404.html;
            error_page 500 /error/500.html;
            error_page 501 /error/501.html;
            error_page 502 /error/502.html;
            error_page 503 /error/503.html;
            error_page 504 /error/504.html;
            error_page 505 /error/505.html;
            error_page 506 /error/506.html;
            error_page 507 /error/507.html;
            error_page 509 /error/509.html;
            error_page 510 /error/510.html;
            include D:/phpstudy_pro/WWW/admin/landpage_server/public/nginx.htaccess;
            autoindex  off;
        }
        location ~ \.php(.*)$ {
            fastcgi_pass   127.0.0.1:9002;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }

        # 添加跨域配置
        location / {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }
        }
}
 

不过这有个坏处,就是每次你重启的时候就会被默认配置覆盖。所以这里有第二种办法:

或者在你的ThinkPHP项目的 nginx.htaccess 文件里配置。(我通过小皮将网站部署后会自动生成这个文件),上面那个文件会把这个配置文件引入进来。       include D:/phpstudy_pro/WWW/admin/landpage_server/public/nginx.htaccess;

#伪静态配置
location / {index  index.html index.htm index.php;autoindex  off;if (!-e $request_filename) {rewrite  ^(.*)$  /index.php?s=/$1  last;break;} 
}# 添加跨域配置location / {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';add_header 'Access-Control-Max-Age' 1728000;add_header 'Content-Type' 'text/plain charset=UTF-8';add_header 'Content-Length' 0;return 204;}}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

worker_processes  1;

  

events {

    worker_connections  1024;

}

  

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

     

    server {

        listen 80;

        # 域名

        server_name localhost;

        # 服务器根目录

        root H:\php\project\UserManager\public;

        # 默认读取的文件

        index index.php index.html index.htm;

  

        location / {

            # 允许浏览器跨域请求

            if ($request_method = 'OPTIONS') {

                add_header Access-Control-Allow-Origin '*';

                add_header Access-Control-Allow-Headers '*';

                add_header Access-Control-Allow-Methods '*';

                add_header Access-Control-Allow-Credentials 'true';

                return 204;

            }

             

  

            if (!-e $request_filename) {

                rewrite ^(.*)$ /index.php?s=/$1 last; break;

            }

            try_files $uri $uri/ /index.php?$query_string;

        }

  

        # 监听127.0.0.1:9000端口,要和php-cgi.exe配置的ip:端口一致

        location ~ \.php$ {

            fastcgi_pass 127.0.0.1:9000;

            include fastcgi_params;

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        }

    }

  

}

其中的“允许浏览器跨域请求”是关键点,因为浏览器在发现网页请求是跨域请求时,会再发送一个OPTIONS请求,只有这个请求成功了才会允许跨域请求,此时,要强行配置允许跨域。(这里配置的是允许全部请求跨域)

2.在ThinkPHP中允许跨域

编辑middleware.php文件

1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

// 全局中间件定义文件

return [

    //允许跨域

    //\think\middleware\AllowCrossDomain::class

    \app\middleware\AllowCrossDomain::class

    // 全局请求缓存

    // \think\middleware\CheckRequestCache::class,

    // 多语言加载

    // \think\middleware\LoadLangPack::class,

    // Session初始化

    // \think\middleware\SessionInit::class

];

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

<?php

declare (strict_types = 1);

  

namespace app\middleware;

  

use Closure;

use think\Config;

use think\Request;

use think\Response;

  

/**

 * 跨域请求支持

 */

class AllowCrossDomain

{

    protected $cookieDomain;

  

    protected $header = [

        'Access-Control-Allow-Credentials' => 'true',

        'Access-Control-Max-Age'           => 1800,

        'Access-Control-Allow-Methods'     => 'GET, POST, PATCH, PUT, DELETE, OPTIONS',

        'Access-Control-Allow-Headers'     => 'Token, Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With',

    ];

  

    public function __construct(Config $config)

    {

        $this->cookieDomain = $config->get('cookie.domain', '');

    }

  

    /**

     * 允许跨域请求

     * @access public

     * @param Request $request

     * @param Closure $next

     * @param array   $header

     * @return Response

     */

    public function handle($request, Closure $next, ? array $header = [])

    {

        $header = !empty($header) ? array_merge($this->header, $header) : $this->header;

  

        if (!isset($header['Access-Control-Allow-Origin'])) {

            $origin = $request->header('origin');

  

            if ($origin && ('' == $this->cookieDomain || strpos($origin, $this->cookieDomain))) {

                $header['Access-Control-Allow-Origin'] = $origin;

            } else {

                $header['Access-Control-Allow-Origin'] = '*';

            }

        }

  

        return $next($request)->header($header);

    }

}

到此这篇关于Nginx+ThinkPHP+Vue解决跨域问题的方法详解的文章就介绍到这了,更多相关Nginx ThinkPHP解决跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com