Nginx не запускает php в определенном каталоге

это мой файл конфигурации nginx

server {
    listen      90;
    server_name localhost;
    root        /var/www/wypok/;
    index       index.php index.html index.htm;

    location / {
        if ($request_uri = /) {
            return 301 /mirkoplusy;
        }
        try_files $uri $uri/ @rewriteToMirkoplusy;
    }

    location @rewriteToMirkoplusy {
        return 301 /mirkoplusy;
    }

    location ~* /mirkoplusy {
        rewrite (?i)^/mirkoplusy/wpis/(.*)/(css|js|fonts)/(.+)/?$ /mirkoplusy/$2/$3;
        rewrite (?i)^/mirkoplusy/wpis/(.*)/?$ /mirkoplusy/;
    }

    location ~* /api {
        rewrite (?i)^/api/v(\d+)/(.+)/?$ /mirkoplusy/api/v$1/main.php?_url=/$2;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Проблема в том, что файлы php не выполняются в каталоге api. Когда я подключаюсь к http://localhost:90/api/v2/init, я возвращаю исходный код моего файла main.php, который вызывается правилом перезаписи

location ~ * / api {

   rewrite (?i)^/api/v(\d+)/(.+)/?$ /mirkoplusy/api/v$1/main.php?_url=/$2;

}

Я создал файл test.php в главном корне, и он работает, поэтому в этом правиле перезаписи должна быть какая-то проблема. Обычно я хочу, чтобы каждый вызов api, например / api / v2 / entry / 23224, передавался в файл /api/v2/main.php.


person mrJoe    schedule 24.05.2016    source источник


Ответы (1)


http://nginx.org/en/docs/http/ngx_http_core_module.html#location
...
Затем проверяются регулярные выражения в порядке их появления в файле конфигурации.
...


Я думаю, что переписанный URL перехватывается location ~* /mirkoplusy и не обрабатывается location ~ \.php$.
Попробуйте определить местоположения mirkoplusy и api по префиксу:

location /mirkoplusy {
    rewrite (?i)^/mirkoplusy/wpis/(.*)/(css|js|fonts)/(.+)/?$ /mirkoplusy/$2/$3;
    rewrite (?i)^/mirkoplusy/wpis/(.*)/?$ /mirkoplusy/;
}

location /api {
    rewrite (?i)^/api/v(\d+)/(.+)/?$ /mirkoplusy/api/v$1/main.php?_url=/$2;
}

Или добавьте местоположение php в mirkoplusy

location ~* /mirkoplusy {
    rewrite (?i)^/mirkoplusy/wpis/(.*)/(css|js|fonts)/(.+)/?$ /mirkoplusy/$2/$3;
    rewrite (?i)^/mirkoplusy/wpis/(.*)/?$ /mirkoplusy/;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
person Max P.    schedule 25.05.2016
comment
Я удалил символы ~ * из обоих правил, и все работает, спасибо. - person mrJoe; 25.05.2016