У меня есть огромная проблема с моей конфигурацией nginx и правилами перезаписи Yii, когда я пытаюсь включить CORS в динамически перезаписанном URL-адресе, сгенерированном Yii, я получаю сообщение об ошибке 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, поэтому я не могу сервер CORS ни в одном URL Yii
Может кто-нибудь помочь мне, как добавить правила Cors в переписанный URL-адрес ???
Я пытаюсь сервер Cors для этого URL:
index.php / API / Логин / пользователь
index.php / апи / автомобили / Поиск
Эти URL не являются реальными, потому что все они генерируются правилами переписывания в Yii.
Спасибо
Задача ещё не решена.
Других решений пока нет …