我有一个带有大量缓存的 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;
}
答案1
这是可用于重定向的位置块
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 匹配
- 重写指令将 /target 转换为 /destination,并保留其后出现的所有内容
- 返回将重定向推送至其他域名
- 如果你不想让用户被重定向,你也可以使用代理传递来做到这一点
答案2
最终使其工作如下:
location ~* "/target" {
if ( $host ~* "www\.(.*)" ) {
return 302 https://nocache.$1/destination;
}
return 302 https://nocache.$host/destination;
}
302 用于测试并将更改为永久重定向。
感谢所有回复的人。