Nginx将对subdomain.tld / files / *的请求重写为外部域

时间:2016-03-08 12:56:48

标签: nginx url-rewriting

我想重写所有与Nginx匹配http://*.examle.tld/files/*http://$1.otherdomain.tld/files/?file=$2的请求。我还想在没有子域即http://example.tld/files/*http://otherdomain.tld/files/?file=$1

的情况下重写相同的请求

原因是使用本地开发的生产文件而无需同步文件夹。

这是我到目前为止所得到的,但没有成功:

location / {
    ...
    rewrite ^http://(\w+)\.(.*)/files/(.*) http://$1.otherdomain.tld/inc/reader.php?file=$3;
    rewrite ^.*/files/(.*) http://$1.otherdomain.tld/inc/reader.php?file=$1;
    ...
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您不能将服务器名称用作rewrite指令正则表达式的一部分。如果server阻止了here所述的通配符server_name,则可以使用命名捕获在稍后的块中使用。

例如:

server {
    server_name ~^(?<sub>\w+\.)?example\.tld$;

    location /files/ {
        rewrite ^/files(.*)$ http://${sub}otherdomain.tld/files/?file=$1 permanent;
    }
}

有关详细信息,请参阅this document