我购买了一个有多个子域名的域名,例如
Kim.domain.com/whatever
john.domain.com/whatever1
Lizo.domain.com/whatever2
Simon.domain.com/whatever1
数量达数千个,并且还包含指向这些页面的链接
我想对所有这些网址进行 301 重定向到 http://域名.com
知道如何做吗?
这是针对 Apache Web 服务器的,需要通过 .htaccess 完成
我已经通过阅读下面的答案实施了解决方案。
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www. domain.com$
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*)$ http:/ / www. domain.com/$1 [L,R=301]
但是我有一个小问题,我想将所有子域名 + 子文件夹重定向到http://www。 domain.com/
除了 http://domain.com/subfolder/ 之外,在这种情况下我想重定向到 http://www.domain.com/subfolder/ [即没有子域名的例外]
我猜我需要添加一个例外,我该怎么做才能实现这一点。
注意:上面的示例 URL 中添加了空格,以防止垃圾邮件阻止帖子。
答案1
您是否打算删除“kim”部分并保留“whatever”部分,以便 kim.domain.com/whatever 重定向到 domain.com/whatever ?如果是这样,请将其放入每个站点的 .htaccess 文件中:
RewriteEngine On
RewriteRule ^/(.*)$ http://domain.com/$1 [L,R=301]
我假设您希望在 .htaccess 中这样做,因为您希望删除 kim、john、lizo 和 simon,但保留 larry、moe 和 curly。如果您这样做,那么我建议在一个目录中创建一个 htaccess 文件,并将该目录设置为您想要“删除”的所有虚拟主机的 DocumentRoot。
如果你想摆脱一切但是“domain.com”,你可以通过完全摆脱所有虚拟主机来提高性能,只保留一个站点,并在你的 Apache 配置中执行(参见“规范主机名“)
RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain.com$
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*)$ http://domain.com/$1 [L,R=301]
如果请求的主机不是“domain.com”且不为空(http 1.0 和不发送 Host: 标头的损坏客户端),则它会将用户重定向到 domain.com。这样服务器就不必确定客户端想要哪个虚拟主机,然后查找并读取 htaccess 文件。
如果你不想要“无论什么”部分,RewriteRule 就变成
RewriteRule . http://domain.com/ [L,R=301]
答案2
就像是:
重写引擎开启
重写库 /
RewriteCond %{HTTP_HOST} !^domain.com$ [NC]
重写规则 ^(.*)$http://domain.com/[左,右=301]
基本上,这句话的意思是,如果 HTTP_HOST 与 domain.com 不匹配,则进行 301 重定向到http://域名.com。请小心转义.
RewriteCond 中的任何内容。
如果您想要保留主机名后的文件夹,以便http://kim.domain.com/whatever
重定向到http://domain.com/whatever
,您可以将最后一行替换为:
重写规则 ^(.*)$http://domain.com/1 美元 [左,右=301]