# File lib/sinatra/url_for.rb, line 44
    def url_for url_fragment, mode=:path_only
      case mode
      when :path_only
        base = request.script_name
      when :full
        scheme = request.env['HTTP_X_FORWARDED_SCHEME'] || request.scheme
        port = request.env['HTTP_X_FORWARDED_PORT'] || request.port
        if ((scheme == 'http' && port.to_s == '80') ||
            (scheme == 'https' && port.to_s == '443'))
          port = ""
        else
          port = ":#{port}"
        end
        request_host = HOSTNAME ? HOSTNAME : request.host
        base = "#{scheme}://#{request_host}#{port}#{request.script_name}"
      else
        raise TypeError, "Unknown url_for mode #{mode}"
      end
      url_escape = URI.escape(url_fragment)
      # Don't add the base fragment if url_for gets called more than once
      # per url or the url_fragment passed in is an absolute url
      if url_escape.match(/^#{base}/) or url_escape.match(/^http/)
        url_escape
      else
        "#{base}#{url_escape}"
      end
    end