Answers:
您可能正在使用正则表达式-
location ~ ^/phpmyadmin/(.*)$
上面的代码与/ phpmyadmin /,/ phpmyadmin / anything / else / here匹配,但与/ phpmyadmin不匹配,因为正则表达式包含斜杠。
您可能想要这样的东西:
location ~ /phpmyadmin/?(.*)$ {
alias /home/phpmyadmin/$1;
}
问号是一个正则表达式量词,应告诉nginx匹配零或前一个字符(斜杠)。
警告:社区将此解决方案视为可能存在的安全风险
更好的解决方案:
location ~ ^/phpmyadmin(?:/(.*))?$ {
alias /home/phpmyadmin/$1;
}
确保服务器具有优先权/home/phpmyadmin
。
与可接受答案的差异说明:
这都是关于正则表达式的。
首先,^
char表示您要从字符串开头而不是中间位置进行匹配。将$
在匹配于字符串的末尾结束手段。
该(?:)
方法非捕获组-我们不希望它在捕获的结果,但我们要简单一些组字符。我们之所以将其分组,是因为我们希望/
char成为子路径的非重要部分,而不是父路径的重要部分。
你为什么不只用
location /phpmyadmin {
alias /home/phpmyadmin;
}
?
alias
指令末尾没有斜杠的情况下进行了尝试?
/phpmyadminblahblahblahblah
或其他任意组合
我知道这是一个古老的问题,但是对于任何通过Google最终出现在这里的人,我可以通过以下方式解决此问题(@kbec的版本非常不错):
location ~ ^/foo(/.*)?$ {
proxy_pass http://$backend$1$is_args$args
}
这将捕获任何变体/foo
并将其重定向到/bar
另一个URL(包括参数)。我正在用proxy_pass
指令显示它,但它也可以使用alias
。
/foo
-> /bar
/foo/
-> /bar/
/foo/sub
-> /bar/sub
/foo/sub1/sub2/?param=value
-> /bar/sub1/sub2/?param=value
之所以有效,是因为$1
它将有选择地捕获子资源和前导斜杠,因此不会捕获/fooextra/
。它还将正确地重定向当前或不存在的结束斜杠。