多域名URL重写需求:跳转后保持URL不变的规则配置
解决方案
针对你的需求,需要在共享目录的配置文件(比如Apache的.htaccess,或Nginx的server配置块)中补充针对subdomain2.domain.com的内部重写规则,实现URL masking(地址栏显示短路径,实际加载长路径内容)。
Apache 完整配置(mod_rewrite)
如果用的是Apache,直接在.htaccess中替换原有规则,加入以下完整配置:
# 规则1:将subdomain1的长路径跳转至subdomain2的短路径(地址栏同步更新) RewriteCond %{HTTP_HOST} ^subdomain1\.domain\.com$ [NC] RewriteCond %{REQUEST_URI} ^/subdomain-category/(.*)$ [NC] RewriteRule ^(.*)$ https://subdomain2.domain.com/%1 [R=302,NC] # 规则2:subdomain2上内部重写短路径到实际长路径(地址栏不变) RewriteCond %{HTTP_HOST} ^subdomain2\.domain\.com$ [NC] RewriteCond %{REQUEST_URI} !^/subdomain-category/ [NC] RewriteRule ^(.*)$ /subdomain-category/$1 [L,NC]
关键说明
- 规则1调整:把原跳转目标从
/subdomain-category/%1改为/%1,确保跳转后地址栏直接显示短路径https://subdomain2.domain.com/subdomain-article。 - 规则2核心:
- 先匹配
subdomain2.domain.com的请求 - 排除已包含
/subdomain-category/的路径,避免循环重写 - 将短路径(如
/subdomain-article)内部映射到实际存在的长路径,这个过程仅在服务器内部处理,浏览器地址栏完全不变。
- 先匹配
Nginx 对应配置
如果用的是Nginx,分两个server块配置:
# 处理subdomain1的跳转逻辑 server { listen 443 ssl; server_name subdomain1.domain.com; # 此处补充SSL证书等配置 location ~ ^/subdomain-category/(.*)$ { return 302 https://subdomain2.domain.com/$1; } # 共享目录的root等基础配置 } # 处理subdomain2的URL masking逻辑 server { listen 443 ssl; server_name subdomain2.domain.com; # 此处补充SSL证书等配置 # 匹配非subdomain-category开头的路径,内部重写 location ~ ^/(?!subdomain-category/)(.*)$ { rewrite ^/(.*)$ /subdomain-category/$1 last; } # 共享目录的root等基础配置 }
注意事项
- Apache需确保已开启
mod_rewrite模块 - 测试阶段用302临时跳转,逻辑验证正确后可改为301永久跳转(若需搜索引擎收录)
内容的提问来源于stack exchange,提问作者deeno
相关产品推荐
相关产品推荐

