我遇到了一个不寻常的问题,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]
为了解决评论...如果所有子域都指向同一位置(同一站点),则您无法在 robots.txt
中阻止
hostnames(子域),除非您在内部将这些请求重写到不同的
robots-block.txt
文件。然而,robots.txt
并不一定会阻止索引,它会阻止爬行,如果这些子域已经被索引,那么如果您只是阻止爬行,它们将在“很长一段时间内”保持索引状态(因为搜索机器人无法重新访问 URL 来更新其缓存)。
您使用的是共享服务器吗?或者你有自己的吗?如果这是您自己的服务器并且您的站点是其上定义的第一个(或唯一)主机,则这只会是“默认主机”问题。 (这很少是共享服务器问题,并且可以说是该服务器的配置错误。)否则,这听起来像是您在 DNS 中定义了一个“通配符”子域(并且可能在服务器配置中定义了相应的
ServerAlias
)。
删除“通配符子域”即可解决您的问题。
具体来说,通配符子域由两部分组成(与任何公共子域/主机名一样):
公共 DNS 区域文件中的
A
(或 CNAME
)记录,格式为:
*.example.com. A <IP-ADDRESS-OF-YOUR-SERVER>
或者,
*.example.com. CNAME example.com.
(其中
*.
前缀表示通配符 - 它只能是 前缀。)
DNS 记录使
<anything>.example.com
的请求能够解析到您的服务器(IP 地址)。
服务器配置中的一个条目,指示服务器接受对
<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
。