对于托管大量域名的网络服务器,我们希望实现重定向,将任何域上的任何子域重定向到其 www. 等效域。
sub1.domain1.com -> www.domain1.com
sub2.domain5.com -> www.domain5.com
anothersub.moredomains.com -> www.moredomains.com
etc
我一直无法找到涵盖通配符子域和域的重写规则。
任何帮助是极大的赞赏!
答案1
如果域名始终有两个组成部分 (x.tld),那么就相当简单。如果您必须考虑 x.co.uk 之类的内容,那么您将需要更大的规则或实际的域名列表。
未经测试,但类似的东西可能会有效。
# enable mod_rewrite
RewriteEngine On
# if the host is prefixed with www, don't match.
RewriteCond %{HTTP_HOST} !^www\.
# match the last two components of the hostname (see below for a bette regex)
RewriteCond %{HTTP_HOST} (.+?)\.(.+?)$
# rewrite to the hostname from the match above (%1 and %2) plus the current url ($1).
RewriteRule /(.*) http://www.%1.%2/$1 [L,R=301]
添加
LogLevel alert rewrite:trace
您可以在错误日志中搜索“rewrite:”来获取调试信息。
这些(.+?)
条件可能更准确地说是“除了点之外的任何内容” ([^\.]+)
,但我不记得 Apache 使用的正则表达式引擎中的确切语法,因此上述版本更简单,可以让您正常工作。