需要自定义 Nginx 正则表达式

需要自定义 Nginx 正则表达式

以下是我现在所拥有的,它可以工作,但需要一些改进。我猜我需要使用正则表达式,这就是我需要帮助的原因。

我需要的是这个

http://www.example.com/filename/segment1/segment2/?argk=argv

转到此处:

http://www.example.com/filename.php/segment1/segment2/?argk=argv

以下内容无需分段即可工作。index.php 按预期工作

location / {
    try_files $uri  $uri.php?$args;
}

location ~ \.php$ {

    try_files $uri $uri/ /index.php?$args;

    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    #   fastcgi_intercept_errors on;
    fastcgi_pass  unix:/tmp/php.socket;
}

我尝试过的东西:

if (!-e $request_filename)
{
    rewrite ^/([^?]*[^?/])/?(\?.*)?$  /$1.php/$2  last;
    break;
}

    if (!-e $request_filename)
    {
        rewrite ^/([^./]+)/(.*) /$1.php/$2 last;
        break;
    }

答案1

rewrite你需要重写模块以及正则表达式来执行路径的内部重写。块内部的类似操作location /应该可以工作。

rewrite ^/([^./]+)/(.*) /$1.php/$2 last;

您还需要修改 PHPlocation块的正则表达式来匹配.php路径中间的文件,因此如下所示:

location ~ \.php(/|$)

答案2

location ~ ^(/[^/]+)(.*)$ {
    try_files $uri $1.php$2$is_args$args;
}

location ~ ^(.+\.php)(/.*)?$ {

    try_files $uri /index.php?$args;

    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$1;
    fastcgi_param SCRIPT_NAME $1;
    fastcgi_param PATH_INFO $2;

    #   fastcgi_intercept_errors on;
    fastcgi_pass  unix:/tmp/php.socket;
}

相关内容