Warm tip: This article is reproduced from serverfault.com, please click

php-如何防止ProxyPreserveHost无限期重定向?

(php - How can I prevent ProxyPreserveHost from redirecting indefinitely?)

发布于 2020-12-03 10:17:50

我想拥有两个子域my.domain.comfoo.my.domain.com,两个都重定向到我的Apache2服务器(127.0.0.1/my/的相同目录

但是,我希望那里的脚本能够分辨请求来自哪个域。从我的角度来看,有两种方法可以做到这一点:

  • 使用RewriteRule?foo=bar在每个包含的请求的末尾添加.php,但这听起来很脏
  • 使用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,但没有任何改变。

如何保存主机而不引起重定向循环?

Questioner
Rackover
Viewed
11
Rackover 2020-12-07 22:18:23

找到了:

$_SERVER["HTTP_X_FORWARDED_HOST"]包含主机名,因此foo.my.domain.com就我而言。我不需要UseCanonicalName 也没有ProxyPreserveHost最后。