我有以下设置 - 某些软件的生产版本;
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
没有尝试过,但是应该可行。