带有命名位置的正则表达式 nginx 位置

带有命名位置的正则表达式 nginx 位置

我有以下设置 - 某些软件的生产版本;

location @myradio {
    rewrite ^/myradio/([^/]+)/([^/]+)/?  /myradio/index.php?module=$1&action=$2 last;
    rewrite ^/myradio/([^/]+)/?          /myradio/index.php?module=$1 last;
}

location /myradio {
    alias /usr/local/www/myradio/src/Public;
    try_files $uri $uri/ @myradio;

    location ~ \.php {
        fastcgi_index   index.php;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    $request_filename;
        fastcgi_pass    php5-fpm;
    }
}

以及几个开发版本 — 其中还包括 myradio-lordaro。

location @myradiodev {
    rewrite ^/myradio-([^/]+)/([^/]+)/([^/]+)/?  /myradio-$1/index.php?module=$2&action=$3 last;
    rewrite ^/myradio-([^/]+)/([^/]+)/?          /myradio-$1/index.php?module=$2 last;
}

location /myradio-dev {
    alias /usr/local/www/myradio-dev/src/Public;
    try_files $uri $uri/ @myradiodev;

    location ~ \.php {
        fastcgi_index   index.php;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    $request_filename;
        fastcgi_pass    php5-fpm;
    }
}

这两种方法都可以很好地工作,但是多次复制相同的 /myradio-* 配置似乎效率低下,我觉得我可以做得更好。

是否可以将开发配置概括为使用正则表达式将 nginx 重定向到正确位置的配置? @myradiodev 已成功用于所有开发版本,因此我不认为这是问题所在,但我自己尝试这样做只导致了各种 403 或 404 错误,不清楚 nginx 试图访问的位置。

[感谢有关如何清理此问题的其他建议(最初是从 apache 配置转换而来的)]

答案1

您可以在位置块中使用正则表达式。(您已经在 php 的嵌套位置块中这样做了)。它由波浪符号“~”表示。

location ~ ^/myradio-([^/]+)

然后,您可以像这样使用匹配变量:

alias /usr/local/www/myradio-$1/src/Public;

或者不使用匹配变量的清理器:

alias /usr/local/$request_uri/src/Public

没有尝试过,但是应该可行。

相关内容