【问题标题】:.htaccess to strip subdomain from a dynamic domain/host name.htaccess 从动态域/主机名中剥离子域
【发布时间】:2014-05-20 19:04:56
【问题描述】:

我有一些 htaccess 重定向到 www.domain.com,除非它已经在 www 或 www2 子域上。

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} !^www2\.
RewriteRule (.*) http://www.%{HTTP_HOST}/$1

但是当前这段代码并没有剥离主机上已经存在的任何当前子域。

所以我正在寻找的是一些 htaccess,它将首先剥离子域,然后添加 www。或类似的想法。

不过,我的另一个要求是域名是动态的,因为许多站点都使用了相同的 htaccess 位。这就是为什么在我当前的代码中我使用 %{HTTP_HOST} 变量的原因。但也许有另一个变量更适合这种情况?

【问题讨论】:

  • 尝试查看输出它的 php $_SERVER 变量 print_r($_SERVER),也许你能找到你需要的,因为 htaccess & php 使用相同的变量
  • 嗨@Rustam,为此,我想要一个纯粹的htaccess解决方案。 (尽管在 PHP 或任何服务器端语言中肯定会很简单)
  • 所以你想删除 all 子域,以防它不是以 wwwwww2 开头的?例如,www.foo.bar.example.com 很好,但 foo.bar.example.com 应该重定向到 www.example.com?
  • 嗨@ndm,实际上所有子域都应该重定向,例如foo.example.com、foo.bar.example.com 和 www.foo.bar.example.com 都应该重定向 www.example.com

标签: apache .htaccess mod-rewrite redirect


【解决方案1】:

例如,您可以尝试匹配www(2).domain.tld 方案,捕获带有HTTP_HOST 附加条件的主机部分,并将其用于规则替换部分,例如

RewriteCond %{HTTP_HOST} !^www2?\.[^\.]+\.[^\.]+$ [NC]
RewriteCond %{HTTP_HOST} ([^\.]+\.[^\.]+)$
RewriteRule (.*) http://www.%1/$1 [R=302,L]

这应该将所有非www(2).domain.tld 主机重定向到www.domain.tld

ps。请确保使用适当的response status code,具体取决于您尝试通过这些重定向实现的目标。

【讨论】:

  • 嗨@ndm,谢谢你,但这似乎不适用于使用二级域名(如 domain.co.uk 或 doamin.org.uk)的域。有什么想法吗?
  • 在我的情况下,我碰巧只需要以下支持:.co.uk .com .org .org.uk .com.au .net .info。所以我会尝试修改正则表达式以允许这些。
  • 在我的 .htaccess 中结束了以下内容:RewriteCond %{HTTP_HOST} !^www2?\.([^\.]+\.(com(\.au)?|(recds12\.)?co\.uk|org(\.uk)?|net|info))$ RewriteCond %{HTTP_HOST} ([^\.]+\.(com(\.au)?|(recds12\.)?co\.uk|org(\.uk)?|net|info))$ RewriteRule (.*) http://www.%1/$1 [R=301,L]
猜你喜欢
  • 1970-01-01
  • 2014-07-25
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多