RewriteRule 处理一个域两个文件夹到两个域没有文件夹

RewriteRule to handle one domain two folders to two domains no folder

我正在尝试创建重写规则来处理某些特定的网站重定向:

我想将域1.ca/folder1/xyz 转到域2.ca/xyz 和域1.ca/folder2/xyz 转到域3.ca/xyz

目前我的尝试如下:

RewriteCond %{HTTP_HOST} ^domain1.ca$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain1.ca$
RewriteRule ^(\/folder1\/)(.*)$ "https://domain2.ca/" [R=301,L]

RewriteCond %{HTTP_HOST} ^domain1.ca$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain1.ca$
RewriteRule ^(\/folder2\/)(.*)$ "https://domain3.ca/" [R=301,L]

如有任何帮助,我们将不胜感激 :) 谢谢。

您现有规则的几个问题:

  • .htaccessRewriteRule 模式 匹配的 URL-path 不以斜杠开头。所以,URL-path 开始于 folder1/xyz,而不是 /folder1/xyz

  • 您不必要地在第一个带括号的子模式中捕获“folder1”,并在 substitution 字符串(即 </code>)中使用它。您应该使用 <code>,或者不要捕获第一个路径段。

指令也可以稍微整理一下(例如,不需要 backslash-escape 正则表达式中的斜线,并且可以组合 条件 )。

改为尝试以下操作:

RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.ca [NC]
RewriteRule ^folder1/(.*) https://domain2.ca/ [R=301,L]

RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.ca [NC]
RewriteRule ^folder2/(.*) https://domain3.ca/ [R=301,L]

补充说明:

  • 不需要 RewriteRule 模式 (.*)$ 之后的 end-of-string 锚点 ($),因为正则表达式是贪婪的默认情况下。
  • 如果参数包含 空格.
  • ,则只需将参数用双引号引起来
  • 我从 CondPattern 的末尾删除了 end-of-string 锚点 ($) 以匹配以点结尾的完全限定域名。
  • 我在条件中添加了 NC 标志。从技术上讲,某些机器人可以发送 mixed/uppercase Host header.

首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。