我有一个客户,他有一个像this-site.com
和这样的域名thissite.com
,在不深入研究其背后的整个问题的情况下,我们需要将任何传入请求重定向到*.this-site.com
匹配的任何域名*.thissite.com
。
例如:
subdomain1.this-site.com -> subdomain1.thissite.com
subdomain2.this-site.com -> subdomain2.thissite.com
subdomain3.this-site.com -> subdomain3.thissite.com
有没有办法保留 URL 的第一部分并将其传递给第二个域?
答案1
假设所有这些子域名都解析到文件系统上的同一个位置,那么...从 重定向this-site.com
到thisstite.com
同时保留子域名.htaccess
和 URL 的其余部分(即 URL 路径和查询字符串),您可以使用 mod_rewrite在站点根目录中的文件顶部附近执行以下操作:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+)\.this-site\.com [NC]
RewriteRule ^ https://%1.thissite.com%{REQUEST_URI} [R=302,L]
我假设HTTPS
。这将重定向https://<subdomain>.this-site.com/<url-path>[?<query-string>]
到https://<subdomain>.thissite.com/<url-path>?<query-string>
。
是%1
对最后匹配的第一个捕获组的反向引用条件模式换句话说,这与子域名(([^.]+)
上述正则表达式中的部分)在请求的主机名中。
另请注意:
- 这将重定向所有子域,包括
www
。 - 但它不会重定向子子域,例如
subsubdomain.subdomain1.thissite.com
不会被重定向。 - 并且它只会重定向子域,因此不会重定向
this-site.com
。
这也是一个临时 (302) 重定向。如果要将其永久化,则将 302 更改为 301,但前提是确认它正常工作。(301 会被浏览器严格缓存,因此可能会使测试出现问题。)