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]
如有任何帮助,我们将不胜感激 :) 谢谢。
您现有规则的几个问题:
在 .htaccess
中 RewriteRule
模式 匹配的 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(临时)重定向进行测试,以避免潜在的缓存问题。
我正在尝试创建重写规则来处理某些特定的网站重定向:
我想将域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]
如有任何帮助,我们将不胜感激 :) 谢谢。
您现有规则的几个问题:
在
.htaccess
中RewriteRule
模式 匹配的 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/uppercaseHost
header.
首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。