【问题标题】:htaccess definitive method to redirect domain2.com to domain1.com/specific-pagehtaccess 确定方法将 domain2.com 重定向到 domain1.com/specific-page
【发布时间】:2021-03-29 23:27:40
【问题描述】:

在 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 “让我们做吧命令)。

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

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>

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

最后,我看到一篇文章表明你可以将两行...

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 的最有效方法是什么?

【问题讨论】:

    标签: wordpress .htaccess redirect mod-rewrite


    【解决方案1】:

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

    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 等。

    【讨论】:

    • 谢谢!!!不仅是为了展示最好的方法,也是为了你的解释!在尝试之前我唯一担心的是 Wordpress 在“IfModule”包装器中具有“RewriteEngine On”部分。我把你提供的东西放在“下面/外面”,省去了额外的 RewriteEngine,效果很好!!! :-)
    猜你喜欢
    • 2019-08-20
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2020-07-23
    • 2019-03-05
    相关资源
    最近更新 更多