我的目标是当有人访问时main_site.com/blog
,他们可以从中获得服务内容other_site.com/example_blog
。两个站点都运行 Apache 2.4 和 Ubuntu(分别为 14.04 和 16.04)。
/var/www/html/
我在服务器文件夹根目录下的 index.php 顶部有以下代码other_site.com
。
// http://stackoverflow.com/a/6768831/3774582
echo (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
die();
当我在浏览器中访问 main_site.com/blog 时,我发现浏览器认为的完整 URL 与 PHP 认为的完整 URL 不匹配。
它会从 URL 中删除“博客”。这会导致软件(本例中为 WordPress)认为用户应该被重定向到main_site.com/blog
(重定向到我们已经使用的 URL),并且它会重复此操作,直到遇到过多重定向错误。
除了 SSL 配置外,other_site.com 的 apache 尚未定制。以下是 main_site.com 的相关 apache
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so
SSLProxyEngine On
ProxyPreserveHost On
ProxyRequests Off
<Location /blog>
ProxyPass https://blog.main_site.com
ProxyPassReverse https://blog.main_site.com
Order allow,deny
Allow from all
</Location>
答案1
WordPress 不仅仅相信丢失/example_blog
了:它确实丢失了。
你应该有:
ServerName example.com
<Location /blog>
ProxyPass https://example.org/example_blog
ProxyPassReverse https://example.org/example_blog
您可能还需要调整Set-Cookie
标题中的域和路径字符串:
ProxyPassReverseCookieDomain "example.org" "example.com"
ProxyPassReverseCookiePath "/example_blog/" "/blog/"
</Location>