Nginx

Nginx:將 https://www.domain.tld/target 重定向到 https://nocache.domain.tld/destination

  • December 26, 2016

我有一個帶有大量記憶體的 Cloudflare/Nginx(v1.8.0)/Apache 伺服器配置。

目標是記憶體主域,但允許通過繞過所有記憶體的子域訪問站點。

所以,我正在尋找一種將“ https://www.domain.tld/target ”重定向到“ https://nocache.domain.tld/destination ”的通用方法

對於非 www 域變體,與 request_uri 進行簡單的位置匹配就足夠了,但是如果請求來自 www 子域,就像許多站點一樣,那麼它會重定向到 nocache.www.domain.tld存在。

我嘗試了各種不同的方法來刪除“www”。子字元串,但似乎沒有任何效果。

編輯

這是我的非工作 Nginx 伺服器配置:

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

最後讓它工作如下:

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

 return 302 https://nocache.$host/destination;
}

302 用於測試,將更改為永久重定向。

感謝所有回复的人。

這是一個可用於重定向的位置塊

server {
   server_name www.domain.tld;
   location /target {
       rewrite /target(.*)$ /destination$1 last;
       return 301 https://nocache.domain.tld$request_uri;   
   }
}
  • server_name 限制重定向到www.domain.tld
  • 該位置與所有以 /target 開頭的 URI 匹配
  • rewrite 指令將 /target 轉換為 /destination 並保留之後出現的任何內容
  • 返回將重定向推送到另一個域
  • 如果您不希望使用者被重定向,您也可以使用代理傳遞來執行此操作

引用自:https://serverfault.com/questions/822595