【发布时间】:2021-03-15 08:25:06
【问题描述】:
我正在尝试拥有两个子域,my.domain.com 和 foo.my.domain.com,它们都重定向到我的 Apache2 服务器 (127.0.0.1/my/) 的同一目录。
但是,我希望那里的脚本能够分辨出请求来自哪个域。在我看来,有两种方法可以做到这一点:
- 使用 RewriteRule 在每个包含
.php的请求末尾添加?foo=bar,但这听起来很脏 - 使用 ProxyPreserveHost 向 PHP 脚本指示原始域是什么,这听起来更正常和理智。
但是,当我启用 ProxyPreserveHost 时,我得到了一个永无止境的 301 重定向循环。 这是虚拟主机配置:
My.Domain.com:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName my.domain.com
ProxyPass / http://127.0.0.1/my/
ProxyPassReverse / http://127.0.0.1/my/
ProxyRequests Off
SSLCertificateFile /etc/letsencrypt/live/my.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my.domain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
Foo.My.Domain.Com:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName foo.my.domain.com
ProxyPass / http://127.0.0.1/my/
ProxyPassReverse / http://127.0.0.1/my/
ProxyRequests Off
ProxyPreserveHost On # creates 301 loop!
SSLCertificateFile /etc/letsencrypt/live/my.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my.domain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
注意:我也尝试将ProxyPassReverse / https://foo.my.domain.com/ 放在第二个域foo.domain.com 中,但没有任何改变。
如何在不引起重定向循环的情况下保留主机?
【问题讨论】:
标签: php redirect mod-rewrite apache2 reverse-proxy