如何正确实施 DNS 以及从子域名到域名的重定向

如何正确实施 DNS 以及从子域名到域名的重定向

我们正在更新我们的网站(example.co.uk),其中一部分涉及在 .htaccess 文件中设置从旧网站的 301 重定向 — — 这很好而且很简单。

旧网站有一个区域使用子域名(xyz.example.co.uk),该子域名指向第三方平台。

新网站现在整合了该区域(在几个不同的页面上),因此不再需要子域名。为了获得最佳实践并保留现有链接中的任何 SEO 汁液,最佳做法是什么?我花了几个小时在网上寻找答案,但找不到任何让我有信心实施的东西。

从 SEO 的角度来看,我们理想情况下希望对旧页面进行 301 重定向,如下所示: https://xyz.example.co.uk/page1https://example.co.uk/page2 https://xyz.example.co.uk/page2/page3https://example.co.uk/page4/page5 等等...但是,我知道将这些放在.htaccess 文件(在主域服务器上)中是行不通的,因为我们正尝试从子域转到域?

首先,我们还需要子域名的 DNS 条目吗?还是必须保留它?子域名当前是 CNAME,但我可以将其更改为 A 记录并指向与主域名相同的 IP 吗?

我考虑过很多选择(仅供参考,托管在 Cloudways — Digital Ocean 并且 DNS 通过 CloudFlare 管理):

A) 不用担心页面到 301 页面的重定向,而是在主域 .htaccess 中添加以下内容:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^xyz.example.co.uk$
RewriteRule ^(.*)$ https://example.co.uk/page/ [R=301,L]

但这对 SEO 有害吗?

B) 对重定向不做任何操作,仅使用 A 记录将子域名指向主域名,然后对 SEO 造成影响。

C)在 Cloudflare 中设置页面规则并转发https://xyz.example.co.uk/* 到https://example.co.uk/page— 在这种情况下,我认为我需要保留子域 DNS 条目?但是,是否应该将其更改为 A 记录并指向主域服务器 IP?

我想我现在已经够困惑了,所以任何帮助我都会非常感激,谢谢。

答案1

对于 SEO 来说,最好的选择是将子域名 URL 301 重定向到新 URL。

您需要有一个 DNS 条目,xyz.example.co.uk以便人们可以解析服务器的 IP 地址。

然后,您需要在该 IP 地址上运行 HTTP 服务器来提供所需的重定向。对于您来说,它可以是您当前用于主站点的同一台服务器(前提是托管服务提供商支持子域设置)。

在 HTTP 服务器中,您需要为 定义一个虚拟服务器xyz.example.co.uk,其中将包含您想要使用的重定向规则。

您还需要确保https://xyz.example.co.uk已安装有效的 TLS 证书。

答案2

SEO 优化更多是网站管理员 SE问答网站。

技术上:

首先,我们还需要子域名的 DNS 条目吗?

你需要A子域的 DNS 条目xyz.example.co.uk必须保留,以便任何类型的重定向都能够存在。如果没有该 DNS 条目,对 xyz.example.com 的任何请求都将失败,并出现“主机未找到”或类似的 DNS 错误...

未找到 google 域名
未找到 safari 域名

为了在 Web 浏览器中进行重定向,需要在xyz.example.co.uk将子域指向的任何主机上运行 Web 服务器。

如果您有 HSTS 策略和/或旧子域名也可在 HTTPS 上使用,您也需要为该 Web 服务器配置有效的 SSL 证书xyz.example.co.uk

如果您将xyz.example.co.uk子域名指向与主网站使用的同一 Web 服务器(例如使用 CNAME 记录),则您有两个选择:

  • xyz.example.co.uk
    您专门为(我推荐的解决方案,因为这可以使配置保持良好和独立)创建一个额外的“VirtualHost”条目
  • xyz.example.co.uk您处理现有网站中的请求www.example.com。然后:
    • 要么您不做任何特殊处理,然后http://xyz.example.co.uk将显示http://www.example.com索引页,并且请求http://xyz.example.co.uk/page2/page3将显示该页面http://www.example.co.uk/page2/page3(如果存在)或 404 错误页面(如果不存在)。
    • 或者,您可以配置重写规则,当xyz.example.co.uk用于访问您的网站时触发该规则,并执行您也可以从单独的 VirtualHost 执行的那种重定向

Apache 风格中最简单的配置(因为你正在谈论令人厌恶的文件.htaccess)使用Redirect指令将重写对或http://https://xyz.example.com/service/foo.txt请求https://www.example.com/service/foo.txt

# existing VirtualHost for www.example.com 
<VirtualHost *:80>
    Servername www.example.com
    ...
</VirtualHost>
<VirtualHost *:443>
    Servername www.example.com
    SSLCertificateFile "/etc/apache2/conf/ssl/www.example.com.crt"
    SSLCertificateKeyFile "/etc/apache2/conf/ssl/www.example.com.key"
    ...
</VirtualHost>

# new minimal VirtualHost entries for xyz.example.co.uk
<VirtualHost *:80>
    Servername xyz.example.com
    Redirect "/" "https://www.example.com/"
</VirtualHost>
<VirtualHost *:443>
    Servername xyz.example.com
    SSLCertificateFile "/etc/apache2/conf/ssl/xyz.example.com.crt"
    SSLCertificateKeyFile "/etc/apache2/conf/ssl/xyz.example.com.key"
    Redirect "/" "https://www.example.com/"
</VirtualHost>

始终使用临时重定向开始测试您的重定向,因为永久重定向会被您的浏览器缓存,这会使纠正任何错误变得困难。

由于您已经提到在某些位置找不到旧子域的内容,因此Redirect上述指令可能不是最佳解决方案。

相反,你可以选择将所有旧 URI 重定向到单个登录页面(解释 XYZ 已被弃用,请使用此站点地图浏览新站点)。RedirectMatch指示:

# new minimal VirtualHost entries for xyz.example.co.uk
<VirtualHost *:80>
    Servername xyz.example.com
    RedirectMatch "*" "https://www.example.com/xyz-is-deprecated.html"
</VirtualHost>
<VirtualHost *:443>
    Servername xyz.example.com
    SSLCertificateFile "/etc/apache2/conf/ssl/xyz.example.com.crt"
    SSLCertificateKeyFile "/etcl/apache2/conf/ssl/xyz.example.com.key"
    RedirectMatch "*" "https://www.example.com/xyz-is-deprecated.html"
</VirtualHost>

最耗费人力的是将 xyz 子域上的每个旧页面映射到主网站上的新页面。例如,可以使用RewriteMap指示。

最简单的映射是将旧 URI 路径映射到新 URI 路径的文本文件,例如映射文件:/etc/apache2/xyz-to-www.txt

##
## xyz-to-www.txt - Map old URI's from xyz.example.com to 
##                  corresponding URI's on www.example.com
##
/             /xyz-is-deprecated.html
/page1        /page2 
/page2/page3  /page4/page5 

然后这将映射http(s)://xyz.example.co.uk/page1https://www.example.co.uk/page2,任何未映射的内容都将被重定向到页面https://www.example.com/yz-is-deprecated.html

# new minimal VirtualHost entries for xyz.example.co.uk
<VirtualHost *:80>
    Servername xyz.example.com
    RewriteMap xyz-to-www "txt:/etc/apache2/xyz-to-www.txt"
    RewriteRule "(.*)" "https://www.example.com${xyz-to-www:$1}" [R]
</VirtualHost>
<VirtualHost *:443>
    Servername xyz.example.com
    SSLCertificateFile "/etc/apache2/conf/ssl/xyz.example.com.crt"
    SSLCertificateKeyFile "/etcl/apache2/conf/ssl/xyz.example.com.key"
    RewriteMap xyz-to-www "txt:/etc/apache2/xyz-to-www.txt"
    RewriteRule "(.*)" "https://www.example.com${xyz-to-www:$1|/xyz-is-deprecated.html}" [R]
</VirtualHost>

注意:以上所有内容均未经测试,仅用于说明概念。

相关内容