301使用或不使用参数在nginx中重定向

时间:2017-08-09 10:08:00

标签: nginx

我想在每次调用mydomain.com/blog2时重定向到子域名,到目前为止我有这个:

location ^~ /blog2/$ {
    return 301 https://blog.mydomain.com$request_uri$is_args$args;
}

这仅适用于没有尾部斜杠或/ blog2 / somethingelse中断的mydomain.com/blog2/,/ blog2。 / blog2 / somethingelse /转到blog.mydomain.com没有somethingelse部分。

我如何实现:

mydomain.com/blog2                    --> blog.mydomain.com
mydomain.com/blog2/                   --> blog.mydomain.com
mydomain.com/blog2/something          --> blog.mydomain.com/something
mydomain.com/blog2/something/         --> blog.mydomain.com/something
mydomain.com/blog2/something?foo=bar  --> blog.mydomain.com/something?foo=bar

1 个答案:

答案 0 :(得分:1)

如果您需要删除网址的/blog2/部分,则无法使用$request_uri,因为它包含完整的原始URI。您需要使用正则表达式捕获所需URI的部分,作为locationrewrite语句的一部分。

使用正则表达式location语句:

location ~ ^/blog2(?:/(.*))?$ {
    return 301 https://blog.mydomain.com/$1$is_args$args;
}

可能与以下内容相同:

rewrite ^/blog2(?:/(.*))?$ https://blog.mydomain.com/$1 permanent;

有关详情,请参阅this document