我已经花了很长时间来解决这个问题,而且我无法理解nginx + hhvm如何映射我的请求.
基本上,我在api.example.com上有一个API,我想用Accept:application/vnd.com.example.api.v1 + json调用版本1和application/vnd.com.example.api.v2 + json for version 2. API本身是一个PHP应用程序,我将使用全新安装的HHVM运行.所有请求都将由index.php处理.
api.example.com/
index.php (content: fail)
v1/
index.php (content: v1)
v2/
index.php (content: v2)
Run Code Online (Sandbox Code Playgroud)
每当我使用我的REST客户端访问带有v1接受标头的api.example.com/test时,我都会收到v1响应.当我使用v2的accept标头时,它会显示v2.所以一切都是正确的.如果我不提供任何接受标题,我会被重定向到example.com
map $http_accept $api_version {
default 0;
"application/vnd.com.example.api.v1+json" 1;
"application/vnd.com.example.api.v2+json" 2;
}
server {
# listen to :80 is already implied.
# root directory
root /var/www/api.example.com/;
index index.html;
server_name api.example.com;
include hhvm.conf;
location / {
if ($api_version = 0) {
# redirect to example.com if applicable
# Accept-header is missing
return 307 http://example.com;
} …Run Code Online (Sandbox Code Playgroud)