使用新的根/别名 - Nginx在位置内重写

时间:2014-04-06 22:16:35

标签: nginx location rewrite alias root

我的文件夹结构如下:

/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]的目录索引是禁止的

有人能想出一个真正有用的更好的解决方案吗?

此致

1 个答案:

答案 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;
    }    
}