Regex Nginx位置块匹配规则

Regex Nginx位置块匹配规则,regex,nginx,configuration,webserver,Regex,Nginx,Configuration,Webserver,我是nginx服务器的新手。 我将把php框架(如codeigniter)部署到nginx服务器。 我的配置文件如下 server { index index.html index.php index.htm; # set expiration of assets to MAX for caching location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ { expires max;

我是nginx服务器的新手。 我将把php框架(如codeigniter)部署到nginx服务器。 我的配置文件如下

server {
    index index.html index.php index.htm;

    # set expiration of assets to MAX for caching
    location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {  
        expires max;
        log_not_found off;
    }

    location / {  
        # Check if a file exists, or route it to index.php.
        try_files $uri $uri/ /index.php;
    }

    location ~* \.php$ {  
        fastcgi_pass unix:/var/run/php/php7-fpm.sock;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
 }
我的问题如下。 1请求uri如下:www.domain.com/controllername/functionname/param1/param2/ nginx如何处理这个url

2第三个位置块与正则表达式.php$匹配。 只有当uri以.php结尾时,这才是真的吗?
我想是的,但那个块的fastcgi_split_path_info有不同的正则表达式

问题1是的,这应该有效,因为

try_files $uri $uri/ /index.php;
一个请求一个接一个地处理。首先,nginx尝试查找URI描述的文件,如果不匹配,它将检查它是否是目录。如果没有,则调用index.php文件。原始URI与许多其他HTTP_请求变量一起移交,如果您正确配置codeigniter,则codeigniter中的代码负责解析url。 codeigniter的调用约定是www.domain.com/controllername/public_function/param1/param2/ 因此,通常您不会在URI中给出viewname,而是控制器和函数名


问题2 location指令只使用URI路径,没有任何GET参数。split_路径的工作方式不同,因此它需要不同的regexp。

在codeigniter处理uri之前,nginx是否处理该uri?我想是的。没错,但是你的配置工作方式这不是问题。谢谢,但是当codeigniter收到uri时,它是如何改变的?我的意思是如何将www.domain.com/controllername/public_function/param1/param2/更改为index.php?请查询帮助。这对nginx来说不是问题。