【发布时间】:2017-10-25 04:23:48
【问题描述】:
我需要在 nginx 中创建一个虚拟子目录,它将从不同于根目录的位置提供文件。此虚拟目录也运行 PHP,但为简洁起见,我省略了 fastcgi 配置。
我有两个位置块,一个 /virtual 目录使用别名,而 / 的位置块有它自己的根指令。这个根指令被虚拟文件夹继承,弄乱了路径。有什么办法可以排除 /virtual 中的 url 继承 / location 块的根指令?
这是我的服务器配置的摘录:
server {
root /path/to;
location ^~ /virtual/ {
alias /path/to/lions/public;
try_files $uri $uri/ /lions/public/index.php?$query_string;
}
location / {
root /path/to/tigers/public;
try_files $uri $uri/ /index.php?$query_string;
}
}
如果我浏览到 hostname/virtual/whatever,nginx 会在
处查找文件/path/to/tigers/public/lions/public/whatever
而不是
/path/to/lions/public/whatever
我尝试了以下模式来匹配 / 处的所有 URL,但以 /virtual 开头的 URL 除外,但这不匹配任何内容。
location ^~ ((?!\/virtual)\/.*)$
我也尝试在 /virtual 的位置块中同时放置别名和根指令,但 nginx 无法启动。
还有其他方法可以为我的别名目录设置不同的根目录吗?
【问题讨论】:
-
试试this approach。使用
location ~ ^/?virtual/.*$ { # empty },然后使用location / { ... }