.htaccess两个域重定向到一个ssl域



我一直在努力让这些代码发挥作用。我的网站上有两个域名,我需要将所有流量重定向到安全的url。

这是我的代码:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?old-domain.cl$ [OR]
RewriteCond %{HTTPS} ^(www.)?old-domain.cl$ [OR]
RewriteCond %{HTTP_HOST} ^www.new-domain.cl$ [NC]
RewriteRule ^(.*)$ https://new-domain.cl/$1 [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

使用根url:http://new-domain.cl-->https://new-domain.cl和http://old-domain.cl-->https://new-domain.cl,但不在现场的其他位置(例如:http://old-domain.cl/foo根本不改变(。

我从你的问题中了解到"新域.cl";是要重定向到的主机名吗?因此%{SERVER_NAME}指向该主机名?如果是这样的话,这可能就是你想要的:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?old-domain.cl$ [OR]
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,END]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,END]

最好从302临时重定向开始,然后在确定所有设置都正确后,再将其更改为301永久重定向。这可以防止在尝试时出现缓存问题。。。

如果您使用上面的规则收到内部服务器错误(http状态500(,那么很可能您操作的是非常旧版本的apachehttp服务器。在这种情况下,您将在http服务器错误日志文件中看到一个不受支持的[END]标志的明确提示。您可以尝试升级或使用旧的[L]标志,在这种情况下,它可能也会起作用,尽管这在一定程度上取决于您的设置。

该实现将在http服务器主机配置中或在分布式配置文件(".htaccess"文件(中同样工作。显然,重写模块需要加载在http服务器内部,并在http主机中启用。如果您使用分布式配置文件,则需要注意它的解释在主机配置中是否已启用,并且它位于主机的DOCUMENT_ROOT文件夹中。

还有一句话:你应该总是更喜欢把这样的规则放在http服务器主机配置中,而不是使用分布式配置文件(".htaccess"(。这些分布式配置文件增加了复杂性,通常是导致意外行为的原因,很难调试,而且它们确实会减慢http服务器的速度。它们只是在您无法访问真正的http服务器主机配置(读作:非常便宜的服务提供商(或应用程序坚持编写自己的规则(这显然是一场安全噩梦(的情况下提供的最后一个选项。

最新更新