假设我有 1 台 Ubuntu 服务器,其中包含两个站点(它们是子域,同时也包含其他子域的代码):
- house.example.com(还有 api.example.com)- 生产站点
- house-dev.example.com(还有 api-dev.example.com)- 开发站点
我怎样才能将所有对 house-dev.example.com 的 http 请求重定向到https://house-dev.example.com并且所有对 api-dev.example.com 的 http 请求都https://api-dev.example.com?
我在 sites-enabled 中的配置文件是:
对于 house.example.com
<VirtualHost *:80>
ServerName example.com
ServerAlias house.example.com api.example.com
(...)
</VirtualHost>
<VirtualHost *:443>
(...)
</VirtualHost>
对于 house-dev.example.com:
<VirtualHost *:80>
ServerName example.com
ServerAlias house-dev.example.com api-dev.example.com
Redirect "/" "https://house-dev.example.com"
(...)
</VirtualHost>
<VirtualHost *:443>
(...)
</VirtualHost>
我如何将 house-dev(和相关的 api-dev)的所有 http 流量重定向到 https?
我已准备好所有 .crt 和 .key 文件,路径也都正确。我正在研究方法Redirect
。
我已尝试过Redirect "/" "https://house-dev.example.com"
并且它工作正常house-dev
,但是当我尝试http://api-dev.example.com
重定向到https://house-dev.example.com
。
答案1
我已尝试重定向“/”https://house-dev.example.com“它对 house-dev 来说运行良好,但是当我尝试http://api-dev.example.com重定向到https://house-dev.example.com。
当然可以,因为两个主机名均由同一虚拟主机处理,并且您有一个固定的重定向到house-dev.example.com
。
一个简单的解决方法是,为每个主机名创建一个单独的端口 80 虚拟主机,并在每个主机中都有正确的重定向条目。
或者,您可以使用RewriteRule
perform 进行重定向。类似以下内容(未经测试)
RewriteEngine on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,QSA,L]
Redirect
显然,如果在位置块内使用,也可以使用变量。以下内容来自https://stackoverflow.com/questions/40289269/using-redirectmatch-with-http-host-in-the-destination
<Location "/">
Redirect "https://%{HTTP_HOST}%{REQUEST_URI}"
</Location>