htaccess 最终方法将 domain2.com 重定向到 domain1.com/specific-page

htaccess definitive method to redirect domain2.com to domain1.com/specific-page

htaccess 文件中 map/route/redirect“domain2.com”和“www.domain2.com 的权威、防弹、坚如磐石、最佳实践和方法是什么" 到 "domain1.com/page"?

的特定 wordpress 页面

我已经搜索和阅读了很多,但似乎找不到黄金标准。似乎有太多的变化,我无法弄清楚所有的点点滴滴意味着什么足以知道我应该包括哪些以及最好将哪些排除在外。

例如...

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

我知道前两行处理 with [OR] without “www”部分。

我理解 [NC] 的意思是“不区分大小写”,这似乎很重要。

我发现,在末尾加上 </code>,意味着如果有人访问“domain2.com/page”,它会将他们发送到等效的“domain1.com/page" - 我不应该这样做,因为在我的情况下,我只是有一些额外的域要发送到特定页面。这些额外的域以前没有作为网站存在。</p> <p>我知道最后的 <code>[L][R=301] 是必要的,因为“301”是重定向的类型,而“L”是告诉它的东西执行(“L”et's do it 命令)。

真正难倒我的部分是 ^(.*)$ 我没能找到任何分解每个角色所做的描述。我会按原样使用它,除非我发现的每个例子都显示了它的许多变体,比如...

RewriteRule ^(.*)$ https://domain1.com/page [NC,R=301,L]
RewriteRule ^(.*)  https://domain1.com/page [NC,R=301,L]
RewriteRule ^      https://domain1.com/page [NC,R=301,L]
RewriteRule .*     https://domain1.com/page [NC,R=301,L]

...等等

然后为了真正让我失望,一个例子说最后有一个问号以防止它循环...

RewriteRule ^ https://www.newdomain.com/page/? [R=301,L]

我也对一些将此代码包含在...

中的示例感到困惑
<IfModule mod_rewrite.c>...</IfModule>

...而其他人则没有。哪个是正确的?

最后,我看到一个 post 表明您可以将两行组合在一起...

RewriteCond %{HTTP_HOST} ^domain2.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.domain2.com [NC]

...进入...

RewriteCond %{HTTP_HOST} ^(?:www\.)?domain2\.com$ [NC]

...正确吗?

最后的旁注 - Wordpress 页面在 url(我喜欢)中没有文件扩展名,例如... domain1.com/page ...代替... domain1.com/page.html ...这是否会破坏“RewriteRule”url?

感谢any/all帮助!

PS:哦,我也忘了,将这些域中的 any/all 从 http 强制转换为 https 的最有效方法是什么?

根据您的要求,遵循最小指令规则应该有效:

RewriteEngine On

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

# http -> https redirect
RewriteCond %{HTTPS} !on
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=301]

我们将模式用作 ^(www\.)?domain2\.com$,因为它将匹配 ^www.domain2.comdomain2.com 域,因为我们在开始时将 www. 部分设为可选。

我们只匹配 RewriteRule 中的 ^,以确保我们匹配 domain2 域中的每个 URL。我们也可以使用 .*,但是 ^(匹配正则表达式中的起始位置)短了 1 个完整字符。

我们在目标 URL 中附加一个 ? 以确保旧 URL 中的任何查询字符串都被剥离。所以例如http://domain2.com/?id=123 将被重定向到 https://domain1.com/page

由于我们总是重定向到修复页面 https://domain1.com/page,因此无需捕获原始 URL 并在以后重用它,因此无需使用