Nginx动态位置路径配置
首先我想说的是,我对nginx相当陌生,我基本上只知道我在上周学到了什么 也就是说,我目前有一台标准配置为以下的Nginx服务器:Nginx动态位置路径配置,nginx,nginx-location,Nginx,Nginx Location,首先我想说的是,我对nginx相当陌生,我基本上只知道我在上周学到了什么 也就是说,我目前有一台标准配置为以下的Nginx服务器: server { listen 80; server_name site.com; root /var/www/site.com/; index index.php; location / { try_files $uri $uri/ /index.php; } location /microsite/first {
server {
listen 80;
server_name site.com;
root /var/www/site.com/;
index index.php;
location / {
try_files $uri $uri/ /index.php;
}
location /microsite/first {
try_files $uri $uri/ /microsite/first/;
}
location /microsite/second {
try_files $uri $uri/ /microsite/second/;
}
...
}
这很好,尽管对于我添加到现有微站点的每个微站点,都需要添加一个新位置,以引用新微站点的路径
我的问题是:是否可以动态设置位置
参数,使其捕获并引用microsite/目录中存在的任何子目录
e、 g.符合重写规则的东西rewrite^(/download/*)/media/(.*)\..*$$1/mp3/$2.mp3 last
(取自nginx站点),但应用于位置
参数,如:
location ~ ^/microsite/(.*)$ {
try_files $uri $uri/ /microsite/$1/;
}
其中,$1
将捕获传入的子目录名(.*)
?
(我尝试了我根据(另一个)问题的答案构建的这个片段,尽管它不起作用)
另外,我不是正则表达式专家,我在过去对它做了一些调整,但那是很久以前的事了,我不记得确切的术语,所以这可能是问题的一部分,也许
无论如何,我们非常感谢您的帮助。提前谢谢 尝试以下几点:
location ~ ^/microsite/(?<foo>.+)$ {
try_files $uri $uri/;
root /microsite/$foo;
}
location~^/microsite/(?。+)${
试试_文件$uri$uri/;
root/microsite/$foo;
}
您可能需要将捕获限制在前两个路径段:
location ~ ^(/microsite/[^/]+) {
try_files $uri $uri/ $1/;
}
[^/]
字符类匹配任何非/
字符类。谢谢您的建议,但它不起作用。我像你写的那样尝试了location
块,但是当尝试访问该站点时,它只会打开“保存文件”窗口(下载index.php文件,这显然是我们不想要的)。它需要放在location~\.php$
块之后。有关nginx
如何处理请求,请参阅。您可能希望使用$1/index.php
,将最后一个元素显式链接到index.php
。嘿,Richard,很抱歉缺席,但我正忙于另一个项目,刚刚回到这个问题。我只想感谢你的帮助你的建议起了作用。尽管我从nginx文档中了解到的关于位置
块优先级的问题,我认为位置
配置的路径越精确,作为服务器规则,它的优先级就越高!!尽管该块前面有~
字符,所以。。无论如何,我把它放在你提到的location~\.php$
块之后,效果很好,再次感谢=D干杯!!您对前缀位置的理解是正确的,但是,正则表达式位置是按顺序计算的,直到找到匹配项为止。同时感谢您的反馈,尽管不幸的是,它也不起作用。。共享的位置
块返回500内部服务器错误。我对代码进行了一些处理,看看是否可以让它工作,并发现500是由root/path/$foo
行引起的。我还尝试将$foo
变量放在try_files$uri$uri//path/$foo
(注释掉根…
行)上,它只是打开了“保存文件”窗口。