From e82e35266a7ac6c07c616136e5f5a6cf27432730 Mon Sep 17 00:00:00 2001
From: Andreas Gohr <andi@splitbrain.org>
Date: Wed, 7 Sep 2005 23:35:43 +0200
Subject: [PATCH] fixed handling of non standard ports

darcs-hash:20050907213543-7ad00-c411e9f5788bf2629ba8529c46d7247aff1a2305.gz
---
 inc/init.php | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/inc/init.php b/inc/init.php
index 904fa1726..092d023c3 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -176,24 +176,27 @@ function getBaseURL($abs=false){
   //finish here for relative URLs
   if(!$abs) return $dir;
 
-  $port = ':'.$_SERVER['SERVER_PORT'];
-  //remove port from hostheader as sent by IE
-  $host = preg_replace('/:.*$/','',$_SERVER['HTTP_HOST']);
+  //split hostheader into host and port
+  list($host,$port) = explode(':',$_SERVER['HTTP_HOST']);
+  if(!$port)  $port = $_SERVER['SERVER_PORT'];
+  if(!$port)  $port = 80;
 
   // see if HTTPS is enabled - apache leaves this empty when not available,
   // IIS sets it to 'off', 'false' and 'disabled' are just guessing
   if (preg_match('/^(|off|false|disabled)$/i',$_SERVER['HTTPS'])){
     $proto = 'http://';
-    if ($_SERVER['SERVER_PORT'] == '80') {
+    if ($port == '80') {
       $port='';
     }
   }else{
     $proto = 'https://';
-    if ($_SERVER['SERVER_PORT'] == '443') {
+    if ($port == '443') {
       $port='';
     }
   }
 
+  if($port) $port = ':'.$port;
+
   return $proto.$host.$port.$dir;
 }
 
-- 
GitLab