def url_for url_fragment, mode=:path_only
case mode
when :path_only
base = request.script_name
when :full
scheme = request.scheme
port = request.port
request_host = request.host
if request.env['HTTP_X_FORWARDED_FOR']
scheme = request.env['HTTP_X_FORWARDED_SCHEME'] || scheme
port = request.env['HTTP_X_FORWARDED_PORT']
request_host = request.env['HTTP_X_FORWARDED_HOST']
end
if (port.nil? || port == "" ||
(scheme == 'http' && port.to_s == '80') ||
(scheme == 'https' && port.to_s == '443'))
port = ""
else
port = ":#{port}"
end
base = "#{scheme}://#{request_host}#{port}#{request.script_name}"
else
raise TypeError, "Unknown url_for mode #{mode}"
end
url_escape = URI.escape(url_fragment)
if url_escape.match(/^#{base}/) or url_escape.match(/^http/)
url_escape
else
"#{base}#{url_escape}"
end
end