如何通过Nginx将URL部分路径重定向至新域名
Nginx URL重定向:移除旧路径前缀保留目标部分
你的问题出在正则捕获的范围不对——原来的规则rewrite ^(/app1/app2.*) https://server2.com$1 permanent;把/app1/app2整个都捕获成了$1,所以新URL自然会带上/app1/前缀。要实现只保留/app2及之后的内容,需要调整正则的捕获分组,精准截取需要的部分。
正确配置方案
有两种等价的写法,选你习惯的就行:
写法一:捕获/app2及之后的完整路径
server { listen 443 ssl; server_name server1.com; location ^~ /app1/app2 { # 正则匹配/app1/开头,捕获/app2及之后的所有内容 rewrite ^/app1(/app2.*) https://server2.com$1 permanent; } # 其他SSL、静态资源等配置... }
写法二:单独捕获/app2后面的内容
server { listen 443 ssl; server_name server1.com; location ^~ /app1/app2 { # 匹配/app1/app2开头,捕获后面的所有内容(包括空) rewrite ^/app1/app2(.*)$ https://server2.com/app2$1 permanent; } }
效果验证
两种写法都能实现你的需求:
- 原URL
https://server1.com/app1/app2→ 重定向到https://server2.com/app2 - 原URL
https://server1.com/app1/app2/link1→ 重定向到https://server2.com/app2/link1 - 原URL
https://server1.com/app1/app2/link2?param1=value1→ 重定向到https://server2.com/app2/link2?param1=value1
补充说明
location ^~ /app1/app2是为了优先匹配这个路径,避免被其他location规则干扰;- Nginx的
rewrite默认会自动保留原请求的查询参数,所以不需要手动在目标URL里添加?param1=value1这类内容; permanent代表301永久重定向,适合SEO场景,如果是临时重定向可以改成redirect(302)。
内容的提问来源于stack exchange,提问作者BasicCoder
相关产品推荐
相关产品推荐

