我正在使用一个wordpress网站。在这个wordpress URL中,我在我的作品中使用了2个负载均衡URL。
例如我的实际网址是
www.myurl.com
我的加载blancer网址是
www.myurl01.drd.myurl.com
www.myurl02.drd.myurl.com
对于wordpress当前URL我在function.php中使用以下函数
function current_url() {
$pageURL = 'http';
if( isset($_SERVER["HTTPS"]) ) {
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
此函数返回www.myurl01.drd.myurl.com
负载均衡器URL而不是www.myurl.com
。如何使用此功能获取我的实际网址。
任何人请建议
答案 0 :(得分:1)
current_url()
的实现无法处理WordPress在代理后面运行的情况。与SERVER
,HTTPS
和SERVER_PORT
对应的SERVER_NAME
数组中的值仅与后端服务器相关。
前端代理服务器可以设置特定标头,以使后端能够检测到它在代理后面运行。 WordPress核心功能已经支持这些额外设置,您可能希望在更改代码之前查看这些实现。
如果您希望快速修复(假设您的代理服务器正确设置了值),请HTTP_HOST
使用SERVER_NAME
来解决当前问题。
要获得完整的解决方法,您可能需要查看使用HTTP_X_FORWARDED_PROTO
和HTTP_X_FORWARDED_PORT
。如果定义了这些值,则应使用它们而不是本地等效值。