17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/rack/url.rb', line 17
def call(env)
req = Rack::Request.new(env)
subdomain = env["SUBDOMAIN"] ? "#{env["SUBDOMAIN"]}:" : ""
path = "#{subdomain}#{req.path_info}"
path.downcase! if downcase_before_lookup?
if ::Rewritten.includes?(path.chomp("/")) or backwards=( translate_backwards? && ::Rewritten.exist_translation_for?(path) )
to = ::Rewritten.includes?(path.chomp("/")) || path
current_path = ::Rewritten.get_current_translation(to)
current_path = current_path.split(":").last
current_path = current_path.split('?')[0]
if (current_path == req.path_info) or (::Rewritten.base_from(req.path_info) == current_path) or ::Rewritten.has_flag?(path, 'L')
tpath, tparams = split_to_path_params(to)
env['QUERY_STRING'] = Rack::Utils.build_query(tparams.merge(req.params))
req.path_info = tpath + ::Rewritten.appendix(req.path_info)
@app.call(req.env)
else
r = Rack::Response.new
new_path = env["rack.url_scheme"].dup
new_path << "://"
new_path << env["HTTP_HOST"].dup.sub(/^#{subdomain.chomp(':')}\./, '')
new_path << current_path
new_path << ::Rewritten.appendix(path) unless backwards
new_path << '?' << env["QUERY_STRING"] unless (env["QUERY_STRING"]||'').empty?
r.redirect(new_path, 301)
a = r.finish
end
else
@app.call(req.env)
end
end
|