我的文件夹结构如下:
/www
/api.domain.tld
/app.domain.tld
API包含自己的系统,APP通过HTTP实现API。
我想为app.domain.tld创建一个Nginx服务器,该服务器还包含一个"虚拟目录"用于API。
您可以按以下方式联系API:http://api.domain.tld/method/api.json
但如果可以像这样联系API,那将是很好的:http://app.domain.tld/api/method/api.json而不会将某些内容复制到APP中,但要保留这两个"系统"分离。
我现在拥有的东西:
server {
listen 80;
root /var/www/app.domain.tld;
index index.php index.html;
server_name app.domain.tld;
location ^~ /api {
alias /var/www/api.domain.tld;
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
rewrite ^/api/([a-z]+)/api.json$ /api.php?method=$1 last;
}
location....
location....
location....
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
不幸的是,这确实按预期工作。
重写根本不起作用。我可以得到api.domain.tld / index.php但是当它需要使用重写时,它将无法工作。
我尝试过几件事。我得到404或403有这个错误: [path]的目录索引是禁止的
有人能想出一个真正有用的更好的解决方案吗?
此致
答案 0 :(得分:2)
您应该更改SCRIPT_FILENAME路径:
server {
listen 80;
root /var/www/app.domain.tld;
index index.php index.html;
location ~ ^/api/(.+\.php)$ {
alias /www/api.domain.tld/public/$1;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
}