Nginx:将https://www.domain.tld/targetredirect到https://nocache.domain.tld/destination

我有一个Cloudflare / Nginx(v1.8.0)/ Apache服务器configuration与大量的caching。

目标是caching主域,但允许通过所有caching绕过的子域访问站点。

所以,我正在寻找一种将“ https://www.domain.tld/target ”redirect到“ https://nocache.domain.tld/destination ”的通用方式

与request_uri的简单位置匹配对于非www域变体已经足够了,但是如果请求通过www子域进入,就像许多网站一样,那么它会redirect到nocache.www.domain.tld存在。

我尝试了各种不同的方法来删除“www”。 子string,但似乎没有工作。

编辑

这是我的非工作Nginx的服务器configuration:

server { listen 80 default_server; server_name localhost; set $PROXY_DOMAIN_OR_IP $host; if ( $request ~* ".*(www\.)(.*)\/target" ) { set $host_without_www $2; return 302 $scheme://nocache.${host_without_www}\/destination; } 

这是您可以用于redirect的位置块

 server { server_name www.domain.tld; location /target { rewrite /target(.*)$ /destination$1 last; return 301 https://nocache.domain.tld$request_uri; } } 
  • server_name将redirect限制为www.domain.tld
  • 该位置与以/ target开头的所有URI相匹配
  • 重写指令将/目标转换为/目的地并保留之后出现的任何内容
  • 返回将redirect推送到其他域
  • 如果您不希望用户redirect,也可以通过代理传递进行此操作

最后得到它的工作如下:

 location ~* "/target" { if ( $host ~* "www\.(.*)" ) { return 302 https://nocache.$1/destination; } return 302 https://nocache.$host/destination; } 

302的是为了testing,将被改为永久redirect。

感谢所有的回应。