【问题标题】:Redirect all subfolders from domain A to same subfolder in domain B将域 A 中的所有子文件夹重定向到域 B 中的相同子文件夹
【发布时间】:2021-06-14 14:46:45
【问题描述】:

我有 2 个域,需要将域 A 中的所有子文件夹重定向到域 B 中的同一子文件夹。

域 A = Wordpress
域 B = Prestashop 1.7

我需要完成的示例:

https://domainA.com/subfolder1 -> 301 -> https://domainB.com/subfolder1

域 A 中有很多子文件夹,所以我需要我的规则是通用的

你能指出我正确的方向吗?

【问题讨论】:

  • 为什么要强调“子文件夹”?不是所有内容?那么顶级资源呢?
  • 什么是“子文件夹”? domainA 根目录中的物理子目录?或者只是包含至少一个路径段的 URL?那些“子文件夹”中的“文件”(或 URL?)呢? “文件”也应该被重定向吗?还是您实际上只想将请求重定向到子目录本身(正如您的问题所暗示的那样)?
  • 另外,domainA 和 domainB 是否指向不同的文件系统?
  • 感谢@MrWhite,是的,它指向两个不同的文件系统。感谢您的支持

标签: wordpress .htaccess redirect prestashop http-status-code-301


【解决方案1】:

我理解您实际上想要将所有内容从一个域重定向到另一个域的问题。可以这样做:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?domainA\.com$
RewriteRule ^ https://domainB.com%{REQUEST_URI} [QSA,R=301,END]

R=302 临时重定向开始是有意义的,只有在您对所有内容都满意后才将其更改为R=301 永久重定向。这可以防止缓存问题。

如果为主机“domainA.com”启用了此类规则,则可以在分布式配置文件(“.htaccess”)中实施此类规则。不过,如果您有权访问,您应该更喜欢使用真正的 http 服务器的主机配置。


更新: 在您的评论中,您确认您确实只想重定向“子文件夹”,而不是所有资源。我将“子文件夹”理解为具有路径组件的 URL,该路径组件具有“子文件夹”后跟“/”以及之后的一些其他资源。虽然这根本不必与服务器端文件系统中的实际文件夹相对应......

在这种情况下,这个变体应该可以工作:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?domainA\.com$
RewriteRule ^/?[^/]+/ https://domainB.com%{REQUEST_URI} [QSA,R=301,END]

显然与上述相同的提示适用...

【讨论】:

  • 谢谢。不完全是。我只想将子文件夹、所有子文件夹重定向到它们在域 B 中的匹配项
  • 简直完美!再次感谢,我不熟悉正则表达式(还;))
  • OReilly 有很多关于正则表达式的书籍,如果你没有在复杂性理论中发现它们的话。我推荐一个:oreilly.com/library/view/mastering-regular-expressions/…
  • 谢谢。是的,我计划提高我的正则表达式技能。
【解决方案2】:

你必须编辑wordpress域网站的htaccess文件。

添加 htaccesss 代码,如下所示。

RedirectMatch 301 ^/subfolder1/(.*)$ https://domainB.com/subfolder1/$1

它将https://domainA.com/subfolder1重定向到https://domainB.com/subfolder1

你一定要试试。我希望这会有所帮助。谢谢

【讨论】:

  • 谢谢!是的,这行得通,但我的问题是:我需要一个通用规则,将所有子文件夹从域 A 重定向到域 B 中的同一子文件夹。
  • 再次感谢。如果我理解正确,使用该规则,我需要使用该模式显式添加每个子文件夹。是否有任何通用规则将域 A 中的所有子文件夹指向域 B 中的相同子文件夹?我的意思是......所有这些都没有为每个人添加规则。感谢您的耐心等待!
【解决方案3】:

只是一个替代解决方案....

它指向两个不同的文件系统。

在这种情况下,您不需要检查请求的主机名的附加条件。 (除非您在此帐户上托管 其他 个域?)

为了检测请求的 URL 路径是否包含初始子文件夹,您只需检查 URL 路径是否包含斜杠 (/),而不是显式匹配第一个路径段,因为这不是t 在 substitution 字符串中使用。

例如:

RewriteEngine on
RewriteRule / https://domainB.com%{REQUEST_URI} [R=301,L]

.htaccess目录上下文)中,与RewriteRule匹配的URL路径模式不以斜线开头,所以如果出现斜线我们可以假设 URL 路径中的任何位置都必须有一个“子文件夹”。或者,有 path-info,但由于这是一个 WordPress 网站(我假设您使用的是“漂亮的永久链接”,否则现有答案也不起作用)那么您没有任何合法 URL 上的路径信息。

此重定向需要靠近.htaccess 文件的顶部,# BEGIN WordPress 部分之前。

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多