我的nginx配置和Yii重写规则存在很大问题,当我尝试在Yii生成的动态重写URL中启用CORS时,我得到错误500并且CORS预检请求失败,因为我没有提供任何CORS Yii生成的URL中的服务。
所以我在我的nginx服务器中有这个配置:
server{
listen 443;
server_name api.xxx.com;
access_log /var/log/nginx/api.xxx.com.access.log;
error_log /var/log/nginx/api.xxx.com.error.log;
root /home/xxx/api;
set $yii_bootstrap "index.php";
index $yii_bootstrap;
ssl on;
ssl_certificate /etc/nginx/ssl/api.xxx.com.crt;
ssl_certificate_key /etc/nginx/ssl/api.xxx.com.key;
if (!-e $request_filename) {
rewrite ^(.*)$ /$yii_bootstrap?q=$1 last;
break;
}
# use fastcgi for all php files
location ~ \.php$
{
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index $yii_bootstrap;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
location / {
if ($http_origin ~* (https?://[^/]xxx\.me(:[0-9]+)?)) {
set $cors "true";
}
if ($request_method = 'OPTIONS') {
set $cors "${cors}options";
}
if ($request_method = 'GET') {
set $cors "${cors}get";
}
if ($request_method = 'POST') {
set $cors "${cors}post";
}
if ($cors = "trueget") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
}
if ($cors = "truepost") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
}
if ($cors = "trueoptions") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since';
add_header 'Content-Length' 0;
add_header 'Content-Type' 'text/plain charset=UTF-8';
return 204;
}
} }
所以基本上如果我在位置块上添加这样的东西:
location /index\.php\/api\/login\/user/
不起作用,因为该位置不存在,它只存在于Yii路由中,因此我不能在任何Yii URL中为CORS服务
任何人都可以帮我解决如何将cors规则添加到重写的URL中??? 我正在尝试将角色服务于这个网址:
的index.php / API /登录/用户 的index.php / API /辆/搜索
这些网址并不真实,因为它们都是由Yii上的重写规则生成的。
由于