我正在设置一个简单的虚拟主机来模拟一些特定的响应,这些响应在生产中将来自单个 URL。举例来说,生产 URL 可能如下所示:
http://domain.com/getdeviceinfo/info.bin
它实际上以.ini
格式返回文本。我在我的 webroot 中设置了几个测试文件,/info/(legacy|new)/(daily|monthly)/device.htm
将测试几个不同的响应,我想设置重定向,以便我可以将相同的 url 重定向到适当的资源。测试 URL 可能看起来像这样:
http://devdomain.com/devicename/legacy/monthly/getdeviceinfo/info.bin
我想要做的是提取适当的值并提供(在此示例中)
/info/legacy/monthly/devicename.htm
Chrome 至少正在尝试下载一个叫做的东西info.bin
。
这是我的location
区块:
location ~ ^/(?<device>[^/]+)/(?<software>[^/]+)/(?<plan>[^/]+)/getdeviceinfo/info.bin$ {
alias /opt/dev/hughesnet-modem-simulator/info/$software/$plan;
try_files $uri $uri $device.htm
}
我也尝试将alias
值设置为 来/opt/dev/hughesnet-modem-simulator/info/$software/$device.htm
代替try_files
。我知道我刚刚搞砸了语法,但我不确定我哪里做错了。
任何见解都将不胜感激。
谢谢。
更新
我目前的location
区块:
location ~ ^/(?<device>[^/]+)/(?<software>[^/]+)/(?<plan>[^/]+)/getdeviceinfo/info.bin$ {
types {}
default_type text/plain;
alias /opt/dev/project-root/info/$software/$plan/$device.htm;
}
答案1
.bin
默认映射到 MIME 类型application/octet-stream
,这就是浏览器尝试下载它的原因。
要解决此问题,请覆盖块中的 MIME 类型映射location
:
location /.... {
types { }
default_type text/plain;
# the rest of your stuff
}
答案2
混合使用 alias-with-variables 和 try_files 可能是导致问题的原因。不要使用别名,只需使用 root:
# Including the /s in the variables makes the try_files a little more efficient
location ~ ^(?<device>/[^/]+)(?<software>/[^/]+)(?<plan>/[^/]+)/getdeviceinfo/info.bin$ {
# Set the root to the base of all the files
root /opt/dev/hughesnet-modem-simulator/info;
# construct the file path to append to the root
try_files $software$plan$device.htm =404;
}