如何在 Apache 上将旧的 HTTPS URL 重定向到新的位置 HTTPS?

如何在 Apache 上将旧的 HTTPS URL 重定向到新的位置 HTTPS?

我有很多旧地址和服务器,https://site1.example.comhttps://foo.example.com等等。我想停止拥有这么多服务器和 SSL 证书,并将所有内容移至一个服务器和域。旧链接需要保持有效。

到目前为止,我已经将网络应用程序移至新服务器,https://apps.example.com/namehttps://apps.example.com/foo等等,当使用这些地址时,它们可以正常工作。

我想关闭具有 Apache (2.2) 重定向的旧服务器:

NameVirtualHost 123.123.123.123:80
NameVirtualHost 123.123.123.123:443
<VirtualHost 123.123.123.123:80>
Servername site1.example.com
redirect permanent / https://apps.example.com/site1
</VirtualHost>
<VirtualHost 123.123.123.123:443>
Servername site1.example.com
redirect permanent / https://apps.example.com/site1
</VirtualHost>
<VirtualHost 123.123.123.123:80>
Servername site2.example.com
redirect permanent / https://apps.example.com/site2
</VirtualHost>
...

上述方法有效,但这意味着我需要保持这个旧硬件服务器处于开启状态。

作为测试,我将 site1.example.com 指向 apps.example.com (新服务器)的 IP 地址,并在 Apache(2.4)conf 中:

NameVirtualHost 234.234.234.234:80
NameVirtualHost 234.234.234.234:443
<VirtualHost 234.234.234.234:80>
Servername site1.example.com
redirect permanent / https://apps.example.com/site1
</VirtualHost>
<VirtualHost 234.234.234.234:443>
Servername site1.example.com
redirect permanent / https://apps.example.com/site1
</VirtualHost>

# Main config
<VirtualHost *:80>
Servername apps.example.com
redirect permanent / https://apps.example.com/name
</VirtualHost>
<VirtualHost *:443>
Servername apps.example.com
alias /site1 /srv/www/site1
alias /site2 /srv/www/site2
...
</VirtualHost>

http://site1.example.com只是去根https://apps.example.com不是 apps.example.com/site1。 https://site1.example.com出现错误,SSL 无效,主机名 apps.example.com 不匹配等等。如能提供任何帮助,不胜感激。

答案1

这只是猜测,但我建议不要将 NameVirtualHost 指令与 IP 地址和星号混合使用。我的建议是尝试将所有内容转换为星号,并使用 ServerName 和 ServerAlias 指令来确定客户端请求的旧域,并在此基础上实现适当的重定向……换句话说:

NameVirtualHost *:80
NameVirtualHost *:443
...
<VirtualHost *:80>
Servername site1.example.com
redirect permanent / https://apps.example.com/site1
</VirtualHost>
<VirtualHost *:443>
Servername site1.example.com
redirect permanent / https://apps.example.com/site1
</VirtualHost>
<VirtualHost *:80>
Servername site2.example.com
redirect permanent / https://apps.example.com/site2
</VirtualHost>
<VirtualHost *:443>
Servername site2.example.com
redirect permanent / https://apps.example.com/site2
</VirtualHost>
...
# Main config
<VirtualHost *:80>
Servername apps.example.com
redirect permanent / https://apps.example.com/name
</VirtualHost>
<VirtualHost *:443>
Servername apps.example.com
alias /site1 /srv/www/site1
alias /site2 /srv/www/site2
...
</VirtualHost>

以上内容忽略了 SSL 证书配置。假设您的所有域名都是 example.com(即同一个域名),投资通配符 SSL 证书将大有裨益,可让事情变得简单。

相关内容