phpnginxyii

Yii's URL manager doesnt process the request


The DeliveryController exists, actionCalculate inside it too. Yii or something else solves every request to '/' which is /setting/index. What else might be affecting this URL management behavior?

Request:

POST /fargo/delivery/calculate

Logs:

Action ID: index
Controller ID: setting
Unique Action ID: setting/index // SHOULD BE 'delivery/calculate'
Request Uri: /fargo/delivery/calculate
Document Uri: /web/index.php

web.php:

$config = array_merge_recursive($common, [
    ...
    'components' => [
        ...
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '/fargo/<controller:\w+>/<action:\w+>'=>'/<controller>/<action>',
                '/' => '/setting/index',
                '/support' => '/site/support',
                '/callback/<uuid>/<groupId>' => '/callback/index',
            ],
        ],
    ],
    'on beforeAction' => function ($event) {
       ...
    }
]);

Nginx:

location ~* ^/fargo(.*)$ {
    root /var/www/fargo/;
    rewrite ^/fargo(.*)$ $1 break;
    
    try_files  $uri/ /web/index.php$is_args$args =404;

    fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    fastcgi_index index.php;
    fastcgi_read_timeout 360;
    
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  HTTPS              $https if_not_empty;
    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  REDIRECT_STATUS    200;   
}

Solution

  • Problem was in Nginx and Yii configs.

    web.php:

    'components' => [
        'request' => [..., 'baseUrl' => '/fargo/'],
            ...
            'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => [
                    '/<controller:\w+>/<action:\w+>'=>'/<controller>/<action>',
                    '/' => '/setting/index',
                    ...
                ],
            ],
        ],
    

    sites-available/default:

    ...
    location ~* ^/fargo/.*\.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|map)$ {
        rewrite ^/fargo(.*)$ $1 break;
        try_files /fargo/web/$uri =404;
    }
        
    location /fargo {
        root /var/www/fargo/;
        rewrite ^/fargo/?(.*)$ /$1 break;
        try_files /web/index.php =404;
    
        include fastcgi.conf;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;   
        fastcgi_index index.php;
        fastcgi_pass <path_to_fpm_sock>
    }
    

    fastcgi.conf is pretty common.