不存在的子域名会被 Google 编入索引 - 通过 .htaccess 删除僵尸子域名

问题描述 投票:0回答:1

我遇到了一个不寻常的问题,Google 正在为我网站上不存在的子域建立索引。看起来这些“子域”是由诸如

w.
ww.
等拼写错误创建的。甚至有一些
http://abc.www.example.com
被索引的实例。

我主要担心的是 SERPS 中的内容重复,因为 Google 索引了其中几个不存在/僵尸子域。我希望这些子域要么退出 SERPS,要么重定向到安全的 www。网站版本。

我有Web开发经验,但服务器配置和

.htaccess
/mod重写规则不是我最大的强项。

目前有一个重写规则强制跨站点使用 https - 是否可以修改此规则以强制僵尸子域重定向到

https://www.
?如果可能的话,我可以确保它不会影响网站的真实子域吗?

当前

.htaccess
重定向:

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [NC,R=301,L]
apache .htaccess redirect mod-rewrite http-status-code-301
1个回答
0
投票

为了解决评论...如果所有子域都指向同一位置(同一站点),则您无法在 robots.txt 中阻止

hostnames
(子域),除非您在内部将这些请求重写到不同的
robots-block.txt
文件。然而,
robots.txt
并不一定会阻止索引,它会阻止爬行,如果这些子域已经被索引,那么如果您只是阻止爬行,它们将在“很长一段时间内”保持索引状态(因为搜索机器人无法重新访问 URL 来更新其缓存)。

您使用的是共享服务器吗?或者你有自己的吗?如果这是您自己的服务器并且您的站点是其上定义的第一个(或唯一)主机,则这只会是“默认主机”问题。 (这很少是共享服务器问题,并且可以说是该服务器的配置错误。)否则,这听起来像是您在 DNS 中定义了一个“通配符”子域(并且可能在服务器配置中定义了相应的

ServerAlias
)。

删除“通配符子域”即可解决您的问题。


什么是通配符子域...

具体来说,通配符子域由两部分组成(与任何公共子域/主机名一样):

  1. 公共 DNS 区域文件中的

    A
    (或
    CNAME
    )记录,格式为:

    *.example.com.  A  <IP-ADDRESS-OF-YOUR-SERVER>
    

    或者,

    *.example.com.  CNAME  example.com.
    

    (其中

    *.
    前缀表示通配符 - 它只能是 前缀。)

    DNS 记录使

    <anything>.example.com
    的请求能够解析到您的服务器(IP 地址)。

  2. 服务器配置中的一个条目,指示服务器接受对

    <anything>.example.com
    的请求以及如何处理该请求(例如,通过什么
    <VirtualHost>
    )。如果您的网络服务器中配置了多个站点(虚拟主机),那么在适当的
    <VirtualHost>
    容器中应该有一个明确的指令,格式如下:

    ServerAlias *.example.com
    

    但是,如果上面没有明确定义,并且没有指令/虚拟主机阻止此类请求,则对

    <anything>.example.com
    的请求将被第一个定义的
    <VirtualHost>
    容器(default)捕获。这可能是也可能不是您的网站!这可以说是一个错误配置(除非明确设计) - 通常应该有一个 default
    <VirtualHost>
    容器来捕获“未知”主机的请求并有效地丢弃它们。

因此,删除 DNS 条目 (#1) 足以公开禁用通配符子域(并防止主机名被索引)。但是,除非服务器配置也更新(#2),否则仍然可以访问主机名。


否则,您可以重定向(或阻止)

.htaccess
中的任何非规范主机。例如:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com
RewriteRule ^ - [F]

对于任何不是

example.com
www.example.com
的请求,上述内容都会发送 403 Forbidden。


旁白:

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [NC,R=301,L]

这是不正确的。它仅规范化

http://example.com
。它不会规范化/重定向
http://www.example.com
https://example.com
,因为这两个条件是隐式 AND 的。您需要
OR
两个条件:

RewriteCond %{HTTP_HOST} ^example\.com [NC,OR]
RewriteCond %{SERVER_PORT} 80

为了匹配

example.com
http

© www.soinside.com 2019 - 2024. All rights reserved.