Apache htaccess 重定向?

Apache htaccess 重定向?

我有一个客户,他有一个像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.comthisstite.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 会被浏览器严格缓存,因此可能会使测试出现问题。)

相关内容