微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决htaccess 确定方法将 domain2.com 重定向到 domain1.com/specific-page

在 htaccess 文件中将“domain2.com”和“www.domain2.com”映射/路由/重定向到特定 wordpress 页面的最终、防弹、坚如磐石、最佳实践和方法是什么? domain1.com/page”?

搜索并阅读了很多,但似乎找不到黄金标准。似乎有很多变化,我一直无法弄清楚所有的点点滴滴意味着什么,足以知道我应该包含哪些内容以及最好忽略哪些内容

例如...

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

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

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

我发现通过在末尾添加 $1,这意味着如果有人访问“domain2.com/page”,它会将他们发送到等效的“domain1.com/page” - 这我应该没有,因为就我而言,我只有一些额外的域要发送到特定页面。这些额外的域以前没有作为网站存在。

我了解到最后的 [L][R=301] 是必需的,因为“301”是重定向的类型,而“L”是告诉它执行的东西(“L”et's do it 命令)。

真正让我难受的是^(.*)$ 我找不到任何描述来分解每个角色的作用。我会按原样使用它,除了,似乎我发现的每个示例都显示了它的许多变体,例如...

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

...等等

然后只是为了让我失望,一个例子说在末尾有一个问号以防止它循环......

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

我也对一些将此代码封装在...中的示例感到困惑

<IfModule mod_rewrite.c>...</IfModule>

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

最后,我看到一篇帖子显示您可以将两行...结合起来

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”网址造成影响?

感谢任何/所有帮助!

PS:哦,我也忘记了,强制任何/所有这些域从 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 并在以后重复使用,因此无需使用 $1 等。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。