使用查询参数将NGINX重写为文件

使用查询参数将NGINX重写为文件,nginx,nginx-location,Nginx,Nginx Location,我希望nginx将url重写为特定的php文件,这些文件可以由第一个斜杠之前的内容确定 例如: location / { try_files $uri $uri/ $uri.html @php; } location @php { rewrite ^(/[^/]+)$ $1.php last; rewrite ^(/[^/]+)/(.*)$ $1.php?q=$2 last; } location ~ \.php$ { try_files $uri =404;

我希望nginx将url重写为特定的php文件,这些文件可以由第一个斜杠之前的内容确定

例如:

location / {
    try_files $uri $uri/ $uri.html @php;
}
location @php {
    rewrite ^(/[^/]+)$ $1.php last;
    rewrite ^(/[^/]+)/(.*)$ $1.php?q=$2 last;
}
location ~ \.php$ {
    try_files $uri =404;
    ...
}
  • testing.com/test
    test.com/test
    将被重写为
    test.php

  • testing.com/test2/variable/other variable
    将被重写为
    /test2.php?q=variable/other variable

  • 然后我将使用PHP分解q
    GET
    参数

    我目前尝试的是:

    location / {
        try_files $uri $uri/ $uri.html $uri.php$is_args$query_string;
    }
    

    这适用于我上面显示的示例1,但返回一个404,例如示例2,带有更复杂的URL。

    您可以将命名的
    位置
    try_files
    指令一起使用,以实现一个或多个
    rewrite
    语句。有关详细信息,请参阅

    例如:

    location / {
        try_files $uri $uri/ $uri.html @php;
    }
    location @php {
        rewrite ^(/[^/]+)$ $1.php last;
        rewrite ^(/[^/]+)/(.*)$ $1.php?q=$2 last;
    }
    location ~ \.php$ {
        try_files $uri =404;
        ...
    }
    
    rewrite
    语句按顺序计算。第二个
    try\u files
    语句确保PHP文件实际存在,并且要避免