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]
我理解前两行处理有[OR]
而没有的";www";部分
我理解CCD_ 2的意思是";无情况";,这似乎很重要。
我已经发现,如果最后有$1
,就意味着如果有人去";domain2.com/page";它将把它们发送到等价的";domain1.com/page"-我应该不这样做,因为在我的情况下,我只是有一些额外的域,我想发送到特定的页面。这些额外的域名以前并没有作为网站存在过。
我已经了解到CCD_ 4和CCD_;301〃;是重定向的类型;L";是告诉它执行的事情("L"et的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>
而其他人则没有。哪个是正确的?
最后,我看到一个帖子,显示你可以将两行。。。
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
……这会不会在";重写规则"url?
感谢您的帮助!
附言:哦,我也忘了,什么是最有效的方式来强制任何/所有这些域从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.com
和domain2.com
域,因为我们在一开始就将www.
作为可选部分。
我们在RewriteRule
中只匹配^
,只是为了确保我们匹配domain2
域中的每个URL。我们也可以使用.*
,但^
(匹配regex中的起始位置(短了1个完整字符。
我们在目标URL中添加了一个?
,以确保旧URL中的任何查询字符串都被剥离。因此,例如http://domain2.com/?id=123
将被重定向到[NC]
0。
由于我们总是重定向到修复页面https://domain1.com/page
,因此不需要捕获原始URL并在以后重用它,因此不必使用$1
等