Nginx+ThinkPHP+Vue解决跨域问题的方法详解
解决过程主要有两个步骤。
1.nginx配置允许跨域
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:phpprojectUserManagerpublic;
# 默认读取的文件
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文件
'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解决跨域内容请搜索科站长以前的文章或继续浏览下面的相关文章希望大家以后多多支持科站长!
上一篇:PHP三种方式读取RSA密钥加解密、签名验签完整教程
栏 目:PHP编程
本文标题:Nginx+ThinkPHP+Vue解决跨域问题的方法详解
本文地址:https://www.fushidao.cc/wangluobiancheng/3404.html
您可能感兴趣的文章
- 07-25PHP调用FFmpeg实现视频切片
- 07-25PHP WindSearch实现站内搜索功能
- 07-25PHP建立MySQL与MySQLi持久化连接(长连接)区别
- 02-10windows服务器iis+php获得错误信息的配置方法
- 02-09通过PHP接入DeepSeek API的两种方法
- 02-07PHP调用DeepSeek API的完整指南
- 02-06PHP foreach引用变量导致的问题及其解决方案
- 02-02PHP使用puppeteer抓取JS渲染后的页面内容
- 01-17PHP SM4加密的实现
- 01-17PHP实现用户认证与权限管理的实现


阅读排行
推荐教程
- 07-25PHP建立MySQL与MySQLi持久化连接(长连接)区别
- 07-25PHP WindSearch实现站内搜索功能
- 07-25PHP调用FFmpeg实现视频切片
- 11-23PHP 7安装使用体验之性能大提升,兼容性强,扩展支
- 11-22PHP自定义函数判断是否为Get、Post及Ajax提交的方法
- 11-23隐藏PHP版本与PHP基本安全设置
- 11-23PHP+MYSQL 读写分离简单实战
- 11-23php中 == 和 === 的区别和应用说明
- 11-22详解PHP防止直接访问.php 文件的实现方法
- 11-22PHP编程求最大公约数与最小公倍数的方法示例




