Procházet zdrojové kódy

Cache the base url (protocol://host:port) in the session to make it
faster. get_location already parsed php_self to get the url
e.g. /path/to/sqmail/src
So now, to make Locations compliant, you can either, call get_location if
you know the place you're redirecting to has the same url path you do
(src to src, for example), or check for 'sq_base_url' in the session vars,
call get_location to set it if it isn't there, and then use the
'sq_base_url' session var + base_uri from session + desired location to
redirect.

Erin Schnabel před 22 roky
rodič
revize
86968b3b4b
1 změnil soubory, kde provedl 11 přidání a 5 odebrání
  1. 11 5
      functions/strings.php

+ 11 - 5
functions/strings.php

@@ -190,10 +190,14 @@ function php_self () {
 function get_location () {
     
     global $imap_server_type;
-    
+
     /* Get the path, handle virtual directories */
     $path = substr(php_self(), 0, strrpos(php_self(), '/'));
-    
+
+    if ( sqgetGlobalVar('sq_base_url', $full_url, SQ_SESSION) ) {
+      return $full_url . $path;
+    }
+
     /* Check if this is a HTTPS or regular HTTP request. */
     $proto = 'http://';
     
@@ -234,9 +238,11 @@ function get_location () {
         $port = '';
    }
    
-    /* Fallback is to omit the server name and use a relative */
-    /* URI, although this is not RFC 2616 compliant.          */
-    return ($host ? $proto . $host . $port . $path : $path);
+   /* Fallback is to omit the server name and use a relative */
+   /* URI, although this is not RFC 2616 compliant.          */
+   $full_url = ($host ? $proto . $host . $port : '');
+   sqsession_register($full_url, 'sq_base_url');
+   return $full_url . $path;
 }