使用nginx

时间:2016-03-01 11:42:39

标签: redirect nginx webserver url-redirection http-redirect

我目前正在使用nginx并尝试重定向所有流量,例如firstdomain.org到seconddomain.org这很好用一个简单的重定向,但我现在也希望它交给URI,方案和子域。

E.g。

http(s)://firstdomain.org/重定向到http(s)://seconddomain.org/http(s)://firstdomain.org/test重定向到http(s)://seconddomain.org/testhttp(s)://test.firstdomain.org/重定向到http(s)://test.seconddomain.org/ 等等..

我目前的设置是这样的:

server {
    listen 80;
    listen 443 ssl;
    server_name ~^(?<sub>\w+)\.firstdomain\.org$, firstdomain.org;

    ssl_certificate /path/to/certificate;
    ssl_certificate_key /path/to/certificatekety;

    location / {
        if ($sub = '') {
                return 301 $scheme://seconddomain.org$request_uri;
        }
        return 301 $scheme://$sub.seconddomain.org$request_uri;
    }
}

这是重定向没有子域名的链接就好了但是只要它是例如http(s)://test.subdomain.orghttp(s)://test.subdomain.org/test它不再有效。

我有什么遗漏或是否有更简单的方式nginx支持实现我想做的事情?

1 个答案:

答案 0 :(得分:1)

您可以通过捕获.中的$sub来简化:

server {
    listen 80;
    listen 443 ssl;
    server_name ~^(?<sub>\w+\.)?firstdomain\.org$;

    ssl_certificate /path/to/certificate;
    ssl_certificate_key /path/to/certificatekety;

    return 301 "$scheme://${sub}seconddomain.org$request_uri";
}