【问题标题】:redirect any link on any subdomain-url to another domain将任何子域 URL 上的任何链接重定向到另一个域
【发布时间】:2021-04-23 01:12:43
【问题描述】:

我注册了一个过期域以将所有传入链接转发到另一个域。问题是:很多inlinks放在子域上,例如:axa-art.cdn.contento-v41.eu/axa-art/0eee9cec-58cb-45b2-a4e2-b5f73920068e_091216_axa+art_classic+car+study_de_rz.pdf

我正在寻找 htaccess 中的 301 重定向规则,该规则将任何 url(无论在主域或子域上)转发到“new-url.tld”

axa-art.cdn.contento-v41.eu
axa-art.cdn.contento-v41.eu/slug
any-subdomain.contento-v41.eu
any-subdomain.contento-v41.eu/slug

上面的所有例子都应该 转发到这个确切的 URL:new-domain.tld

问题 1:
是否可以创建一个“通用”规则并将其放入主目录的 htaccess 中?

问题 2:
还是我必须为每个子域写一个特定的规则?

问题 3:
我是否必须为每个要添加重定向规则的子域创建一个子目录并在每个子目录中创建一个单独的 htaccess?

我们非常感谢您的帮助或建议。非常感谢您提前提供的帮助。

【问题讨论】:

  • 不清楚,请务必添加您的 htaccess 文件以及 URL 示例,以便更好地理解您的问题,谢谢。
  • 我不确定我的 htaccess 文件如何帮助您,因为我不知道要添加什么规则。但是我已经附上了。此规则会将主域中的任何 URL 转发到新域。但是对于“子域困境”,我还没有具体的规则。
  • #Permanent URL redirect- by netgrade RewriteEngine on RewriteCond %{REQUEST_URI} !marco-mahling.de/$ RewriteRule $ marco-mahling.de [R=302,L]
  • 为什么我要求在您的问题中添加 htaccess 文件,因为在 SO 上鼓励原始海报添加他们的努力。您可以编辑您的问题并添加它。另请参阅此链接如何发布带有示例的好问题stackoverflow.com/questions/65778994/…,这将有助于我们更好地理解您的问题,干杯。
  • 会的。给我一点时间。看看我怎样才能更轻松地解释和编辑我的问题。

标签: apache .htaccess redirect subdomain


【解决方案1】:

这不仅仅是一个.htaccess 的问题。为了让您的服务器接收到<any-subdomain>.example.com 的请求,需要有必要的 DNS 和服务器配置指令。如果请求未到达您的服务器,则您无法在 .htaccess 中实现重定向。

所以,我怀疑这些子域甚至没有解析?

您需要为每个主机名(即子域)一个一个地创建必要的 DNS A 记录和 ServerAlias 指令,或者在虚拟主机)。但是,如果您需要从 HTTPS 重定向,您仍然会遇到 SSL 证书涵盖这些主机名的问题。

然后您可以在.htaccess 中创建必要的重定向。虽然,由于您需要访问服务器配置(或使用为您执行此操作的控制面板)来实现上述指令,您还应该在服务器配置中实现此重定向。

例如,在您的 .htaccess 文件的顶部,现有指令之前(或在您的 vHost 中):

RewriteEngine On

RewriteCond %{HTTP_HOST} !^new\.example$
RewriteRule ^ https://new.example%{REQUEST_URI} [R=301,L]

上述状态...对于任何不针对new.example 的请求,然后301 重定向到https://new.example/<same-url>

但是,如果您有权访问服务器配置并且此其他域配置在其自己的 vHost 容器中,则可以简化重定向:

Redirect 301 / https://new.example/

更新#1:

此规则会将任何 URL 从主域转发到新域。

# Permanent URL redirect- by netgrade
RewriteEngine on
RewriteCond %{REQUEST_URI} !https://www.marco-mahling.de/$
RewriteRule $ https://www.marco-mahling.de/ [R=302,L]

我在上面发布的规则可能应该完全取代您现有的规则。

是的,您的规则确实将每个 URL 重定向到新域的 root,但它可能是不正确的。 RewriteCond 指令是多余的,实际上并没有做任何事情。 REQUEST_URI 服务器变量包含 URL 路径,它从不 包含方案 + 主机名。因此,您发布的 RewriteCond 指令将始终成功。

如果这是您当前拥有的规则,那么它已经重定向一切。在这种情况下,您的问题似乎是上述必要的 DNS 和服务器配置指令。

根据您的指令,我假设另一个域实际上指向不同的服务器(或同一服务器上的不同 vHost)。否则,这将导致重定向循环。在这种情况下,您只需要我在上面发布的更简单的Redirect 指令。


UPDATE#2: 工作正常,但传入的链接仍然没有被转发,因为 url:https://axa-art.cdn.contento-v41.eu/axa-art%2F0eee9cec-58cb-45b2-a4e2-b5f73920068e_091216_axa+art_classic+car+study_de_rz.pdf 中的“%”

这实际上是因为%2F - URL 路径中的编码斜线 (/)。默认情况下,Apache 将拒绝带有 404 的此类 URL(出于安全原因)。

要在 URL 中允许编码斜杠,您需要在服务器配置(或 vHost 容器)中设置 AllowEncodedSlashes On。您不能在.htaccess 中设置它。 (服务器生成 404 发生在 .htaccess 甚至被处理之前。)

但是,我要谨慎启用此功能。 (这里有具体要求吗?你是在新服务器上重新创建这些文档吗?)

如果此请求旨在直接映射到磁盘上的 PDF 文件,那么这实际上看起来像是一个错误的 URL 编码请求,因为斜线 / 在 Windows 或 Linux 上都不是允许的文件名字符。

如果您启用AllowEncodedSlashes,那么上面的RewriteRule 会将请求重定向到/axa-art/0eee9cec....pdf - 请注意结果 URL 中的 %-decoded /。您需要采取额外的步骤来维护 URL 编码(如果需要),但正如我所说,这看起来像是一个错误。

【讨论】:

  • 您好 MrWhite,感谢您的帮助。我尝试了几件事。我没有使用您的 .htaccess 规则来管理它 我做了什么:我创建了子域 axa-art.cdn.contento-v41.eu 在这里,我添加了另一个具有与上述相同规则的 .htaccess 文件。这工作正常,但传入的链接仍然没有转发,因为 url 中的“%”:axa-art.cdn.contento-v41.eu/…
  • 你知道我能做些什么来解决这个问题吗?也许当我添加另一个规则时,将 404 转发到“new-domain.tld”会起作用吗?
  • “我创建了子域” - 是的,这就是我在回答的第一部分中所说的。除非您对这些子域有其他要求,否则它们都应该指向同一个位置 - 您不必创建“另一个”.htaccess 文件。您只需要一个文件和一个规则 - 如上所述。 404 是由 URL 路径中的编码斜杠 %2F 引起的。但是,这需要访问主服务器配置才能解决。我已经更新了我的答案。重定向这些“旧”网址的目的是什么?
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 2019-04-09
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2023-02-14
相关资源
最近更新 更多