RewriteCond %{HTTP_HOST} ^websiteone\.ca$ [OR]
RewriteCond %{HTTP_HOST} ^www\.websiteone\.ca$
RewriteRule ^(.*)$ "https\:\/\/websitetwo\.com\/$1" [R=301,L]
这已经将所有(子)页面(不仅仅是主页)重定向到另一个网站的相同 URL 路径。由于您只想在此处重定向主页,因此您应该只匹配空 URL 路径,而不是 any URL 路径。
两个RewriteCond 指令可以合并为一个。
RewriteCond %{HTTP_HOST} ^websiteone\.ca/corporate-responsibility/ [OR]
请注意,HTTP_HOST 服务器变量包含Host HTTP 请求标头的值,即。 主机名。它不包含 URL 路径。所以,上面的条件永远不会匹配。
您应该匹配RewriteRule 模式(第一个参数)中的 URL 路径。
- 这些斜线在做什么?
它们是反斜杠转义。需要(在某些情况下)匹配正则表达式中的文字字符。例如。点是一个特殊字符(匹配任何字符),因此必须进行反斜杠转义以匹配文字点。例如。 \.。但是,RewriteRule substitution 字符串中的所有反斜杠都不是必需的。
所以,要只重定向主页,你可以这样写:
# Redirect homepage only
RewriteCond %{HTTP_HOST} ^(www\.)?websiteone\.ca [NC]
RewriteRule ^$ https://websitetwo.com/ [R=301,L]
- 是否可以添加多个重写规则,或者我必须找到一种方法来完成所有操作?
是的,您可以添加多个规则...每个重定向一个。由于您只想重定向特定的 URL,因此单独的规则可能是要走的路。
虽然,您似乎确实将要重定向的 URL 重定向到相同的 URL 路径,并且由于您必须检查每个重定向的请求主机名,因此如果您愿意,可以将它们组合成一个规则- 我将在下面包含两个示例。
...但是我在网上阅读可能会导致错误。
好吧,您可能需要确保规则的顺序正确以避免冲突,因为规则是从上到下处理的,并且第一场比赛获胜。但否则,这不会导致错误。 (您无法选择单独的规则,就像您要在应用程序中编写此重定向一样。)
RewriteRule ^(.*)$ "https\:\/\/websitetwo\.com/corporate-responsibility/\/$1" [R=301, NC, L]
我不确定您为什么要在此处捕获 URL 路径并将其 ($1) 附加到目标 URL 的末尾(用双斜杠完成)?这将导致 URL https://websitetwo.com/corporate-responsibility//corporate-responsibility/ - 我敢肯定这不是本意。标志之间的 空格 ([R=301, NC, L]) 也是无效的,会导致错误。
所以,把以上几点放在一起......
解决方案 #1
使用多个规则,您可以这样做:
# Redirect homepage only
RewriteCond %{HTTP_HOST} ^(www\.)?websiteone\.ca [NC]
RewriteRule ^$ https://websitetwo.com/ [R=301,L]
# Redirect "/corporate-responsibility/"
RewriteCond %{HTTP_HOST} ^(www\.)?websiteone\.ca [NC]
RewriteRule ^(corporate-responsibility/)$ https://websitetwo.com/$1 [NC,R=301,L]
# Redirect "/contact-us/"
RewriteCond %{HTTP_HOST} ^(www\.)?websiteone\.ca [NC]
RewriteRule ^(contact-us/)$ https://websitetwo.com/$1 [NC,R=301,L]
$1 反向引用包含从RewriteRule 中的第一个捕获组捕获的字符串模式。 IE。上面示例中的“corporate-responsibility/”或“contact-us/”。
首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。只有在您确认它按预期工作后才更改为 301(永久)。
解决方案 #2
由于您在目标站点重定向到相同的 URL 路径,因此您可以使用正则表达式替换将它们组合成一个规则。例如:
# Redirect homepage, "corporate-responsibility/" or "contact-us/"
RewriteCond %{HTTP_HOST} ^(www\.)?websiteone\.ca [NC]
RewriteRule ^(corporate-responsibility/|contact-us/)?$ https://websitetwo.com/$1 [NC,R=301,L]
尽管如果您有许多(甚至只有 10 个)要重定向的 URL,这可能会变得不可读且容易出错。
解决方案 #3
您也可以这样做,同样使用一条规则:
# Redirect homepage, "corporate-responsibility/" or "contact-us/"
RewriteCond %{HTTP_HOST} ^(www\.)?websiteone\.ca [NC]
RewriteCond %{REQUEST_URI} ^/$ [OR]
RewriteCond %{REQUEST_URI} ^/corporate-responsibility/$ [OR]
RewriteCond %{REQUEST_URI} ^/contact-us/$
RewriteRule ^ https://websitetwo.com%{REQUEST_URI} [NC,R=301,L]
为您要重定向的每个 URL 路径添加一个新的条件(RewriteCond 指令),它将重定向到新站点的相同 URL 路径。
注意最后一个条件上没有OR标志。