【问题标题】:301 subdomains to root domain301子域到根域
【发布时间】:2021-07-26 00:18:36
【问题描述】:

我最近重建了一个最初具有 2 个子域结构的网站(每种语言 1 个) 现在我想将这些旧/已删除子域中的所有 URL 301 到根域。

我不想对根域的所有 URL 进行 301 处理,而是需要将旧子域中的特定 URL 进行 301 处理到根域上的新 URL,如下所示:

en.mydomain.com/about-us/ 301 到 mydomain.com/about-us/

es.mydomain.com/about-us/ 301 到 mydomain.com/about-us/

每个子域总共可能有大约 30 个 URL,我需要手动将它们 301 设置为根域上的新 URL

我需要重新创建旧的子域吗?或者这可以通过根域来实现吗?

我还需要为所有 URL 使用 www、非 www、http、https 的通配符。

【问题讨论】:

  • 取决于您的域的默认主机。如果那是您的“根域”(正如您所说的那样),那么您可以使用RewriteCond 指令实现重定向规则,以找出实际请求的主机名(“子域”)。
  • 我已更改主机。旧的子域托管在不同的虚拟主机上。我新建的站点只使用根域,mydomain.com 托管在一个新的虚拟主机上。
  • 我指的不是您的主机,而是默认主机。 http 服务器配置“主机”,即所谓的“域”或“子域”。这些实际上是http主机。通常,其中一台主机用作“默认主机”。这是 http 服务器选择的一种配置,用于响应请求无法找到匹配主机配置的主机的请求。因此,如果您没有为这些“子域”定义任何主机,那么这些请求将由该默认主机响应。这就是您要实现重定向规则的地方。
  • 开始阅读有关该主题的一些内容可能对您有意义。您想了解“虚拟主机”、“大规模虚拟主机”、“主机别名”,尤其是 apache 重写模块提供的功能。我建议您开始深入研究文档。作为开源软件的典型代表,它具有卓越的品质并带有很好的示例:httpd.apache.org/docs/current/vhosts
  • 感谢您的时间和回答,但现在我对所有事情都感到困惑。我以为我在我的主题中已经很清楚了,我想将我的 2 个子域 301 设置为我的“默认主机”或其他任何名称。我应该重新创建我的旧子域并在这两个中添加一个 .htaccess,还是我可以在我的“默认主机”中添加一个 .htaccess?我以前做过很多 301,但一直使用一些 301 插件用于 wordpress,并且总是在 1 个单个域内,不像这次使用子域

标签: .htaccess subdomain http-status-code-301


【解决方案1】:

正如问题 cmets 中所解释的,您可以在 http 服务器中配置的默认主机内实现此类重定向规则,因为该主机将响应对未定义主机的请求。

你可能需要这样的东西:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^(?:www)?\.example\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.example\.com$
RewriteRule ^/?about-us/?$ /about-us/ [R=301]

一般而言,您应该更愿意在实际主机配置中实施此类规则。如果您无法访问它(阅读:廉价托管服务提供商),那么您也可以使用分布式配置文件(通常称为“.htaccess”),但这会带来一些惩罚。

如果需要,也可以交出请求的语言:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^(?:www)?\.example\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.example\.com$
RewriteRule ^/?about-us/?$ /about-us/?lang=%1 [R=301]

R=302 临时 重定向开始可能是有意义的,并且只有在一切按预期工作时才将其更改为R=301 永久 重定向。这样可以防止出现令人讨厌的缓存问题...

【讨论】:

    猜你喜欢
    • 2012-01-22
    • 2013-09-26
    • 1970-01-01
    • 2019-03-05
    • 2011-06-22
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多