如何在Nginx中启用CORS并重写Yii的URL?

时间:2014-10-13 14:10:50

标签: php yii nginx cors

我的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上的重写规则生成的。

由于

0 个答案:

没有答案