public function getUrl()
 {
     static $url;
     if (!isset($url)) {
         if (isset($_GET[RedirectWhenBlockedFull::QUERY_STRING_PARAM_NAME]) && $_GET[RedirectWhenBlockedFull::QUERY_STRING_PARAM_NAME] == Conf::OUTPUT_TYPE_APK && Conf::$apk_url) {
             $url = Conf::$apk_url;
             $filename = basename(parse_url($url, PHP_URL_PATH));
             header('Content-Disposition: attachment; filename=' . $filename);
             // Run after all other code to override other content-type header.
             register_shutdown_function(function () {
                 header('Content-Type: application/vnd.android.package-archive');
             });
         } else {
             $url = RedirectWhenBlockedFull::getRequestUriWithoutQueryStringParam();
             $this->removeThisScriptDirFromUrl($url);
             if (startsWith($url, '/http://') || startsWith($url, '/https://')) {
                 $url = substr($url, 1);
                 if (!TextExternalUrlFilters::matchesUrl($url)) {
                     header('HTTP/1.0 403 Forbidden');
                     exit;
                 }
                 // If we for some reason have the default upstream host and scheme in the URL, remove them.
                 $url_components = parse_url($url);
                 if ($url_components['host'] == Conf::getDefaultUpstreamBaseUrlComponent('host') && $url_components['scheme'] == Conf::getDefaultUpstreamBaseUrlComponent('scheme')) {
                     $new_url = http_build_path_query_fragment($url_components);
                     $new_url = RedirectWhenBlockedFull::getBaseUrl() . ltrim($new_url, '/');
                     header('Location: ' . $new_url);
                     exit;
                 }
                 // Use in DomUtlFilters for relative URLs.
                 $base_url_suffix = rtrim(http_build_scheme_host($url), '/') . '/';
                 RedirectWhenBlockedFull::setBaseUrlSuffix($base_url_suffix);
             } else {
                 if ($url == '/') {
                     if (Conf::$default_upstream_url) {
                         $url = Conf::$default_upstream_url;
                     }
                 }
                 $url = Conf::$default_upstream_base_url . $url;
             }
         }
     }
     // Reverse rewrites of parameters inside URL.
     TextExternalUrlFilters::applyReverse($url);
     Log::add($url, 'url');
     return $url;
 }