Nginx is configured with multiple versions of php interface, and different versions point to different directories.

ask a question about nginx configuring php

server {
    listen       80;
    server_name t.timophp.com;

    charset utf-8;
    access_log off;
    
    location /v1 {
        root /data/a/b;
        index   index.php index.html index.htm;
        if (!-e $request_filename) {
            rewrite ^/v1/(.*)$ /index.php/$1 last;
        }
    }

    location /v2/ {
        root /data/c/d;
        index   index.php index.html index.htm;
        if (!-e $request_filename) {
            rewrite ^/v2/(.*)$ /index.php/$1 last;
        }
    }

    location ~ \.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        fastcgi_pass   unix:/dev/shm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        include        fastcgi_params;
    }
    
    location ~ /\.ht {
        deny  all;
    }
}

multiple version interfaces are configured under one domain name
version 1

/data/a/b

version 2

/data/c/d

version 3

/data/e/f

it doesn"t work according to my configuration

Nov.05,2021

you have reported 404.
because you don't know which directory your / index.php is in.
Open access_log and add error_log to see

.

try the following configuration

server {
    listen       80;
    server_name t.timophp.com;

    charset utf-8;
    access_log off;

    location /v1/ {
        alias /data/a/b/;
        index   index.php index.html index.htm;
        if (!-e $request_filename) {
            rewrite ^/v1/(.*)$ /index.php/$1 last;
        }
        location ~ \.php(/|$) {
            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            fastcgi_pass   unix:/dev/shm/php-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO        $fastcgi_path_info;
            include        fastcgi_params;
        }
    }

    location /v2/ {
        alias /data/c/d/;
        index   index.php index.html index.htm;
        if (!-e $request_filename) {
            rewrite ^/v2/(.*)$ /index.php/$1 last;
        }
        location ~ \.php(/|$) {
            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            fastcgi_pass   unix:/dev/shm/php-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO        $fastcgi_path_info;
            include        fastcgi_params;
        }
    }

    location ~ /\.ht {
        deny  all;
    }
}

rewrite


Please see https://codeshelper.com/a/11.


here.

in addition to the configuration in nginx, there are actually two ways of thinking:

take v1 and v2 as module;

rewrite in the entry file:

if (preg_match('/^\/v(\d+)/', $_SERVER['REQUEST_URI'], $matches)) {
    $arr = [
        1 => '/data/a/b',
        2 => '/data/c/d',
    ];
    include $arr[$matches[1]] . '/index.php';
}
How to configure the version of

PHP?

Menu