From fe736a54f914b7cf406988f42df6c5c129d821a5 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper <jeremy@bitsweat.net> Date: Fri, 12 Jan 2007 07:01:39 +0000 Subject: Set request.env['REQUEST_URI'] when absent. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5895 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/request.rb | 12 +++++++----- actionpack/test/controller/request_test.rb | 20 +++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/actionpack/lib/action_controller/request.rb b/actionpack/lib/action_controller/request.rb index 8c21adb8df..62ce9929da 100755 --- a/actionpack/lib/action_controller/request.rb +++ b/actionpack/lib/action_controller/request.rb @@ -145,19 +145,21 @@ module ActionController @env['RAW_POST_DATA'] end - # Returns the request URI correctly, taking into account the idiosyncracies - # of the various servers. + # Return the request URI, accounting for server idiosyncracies. + # WEBrick includes the full URL. IIS leaves REQUEST_URI blank. def request_uri if uri = @env['REQUEST_URI'] - (%r{^\w+\://[^/]+(/.*|$)$} =~ uri) ? $1 : uri # Remove domain, which webrick puts into the request_uri. - else # REQUEST_URI is blank under IIS - get this from PATH_INFO and SCRIPT_NAME + # Remove domain, which webrick puts into the request_uri. + (%r{^\w+\://[^/]+(/.*|$)$} =~ uri) ? $1 : uri + else + # Construct IIS missing REQUEST_URI from SCRIPT_NAME and PATH_INFO. script_filename = @env['SCRIPT_NAME'].to_s.match(%r{[^/]+$}) uri = @env['PATH_INFO'] uri = uri.sub(/#{script_filename}\//, '') unless script_filename.nil? unless (env_qs = @env['QUERY_STRING']).nil? || env_qs.empty? uri << '?' << env_qs end - uri + @env['REQUEST_URI'] = uri end end diff --git a/actionpack/test/controller/request_test.rb b/actionpack/test/controller/request_test.rb index db81eb3097..f27e71262e 100644 --- a/actionpack/test/controller/request_test.rb +++ b/actionpack/test/controller/request_test.rb @@ -174,48 +174,54 @@ class RequestTest < Test::Unit::TestCase assert_equal "/path/of/some/uri?mapped=1", @request.request_uri assert_equal "/path/of/some/uri", @request.path + @request.set_REQUEST_URI nil @request.relative_url_root = nil @request.env['PATH_INFO'] = "/path/of/some/uri?mapped=1" @request.env['SCRIPT_NAME'] = "/path/dispatch.rb" assert_equal "/path/of/some/uri?mapped=1", @request.request_uri assert_equal "/of/some/uri", @request.path + @request.set_REQUEST_URI nil @request.relative_url_root = nil @request.env['PATH_INFO'] = "/path/of/some/uri" @request.env['SCRIPT_NAME'] = nil assert_equal "/path/of/some/uri", @request.request_uri assert_equal "/path/of/some/uri", @request.path + @request.set_REQUEST_URI nil @request.relative_url_root = nil @request.env['PATH_INFO'] = "/" assert_equal "/", @request.request_uri assert_equal "/", @request.path + @request.set_REQUEST_URI nil @request.relative_url_root = nil @request.env['PATH_INFO'] = "/?m=b" assert_equal "/?m=b", @request.request_uri assert_equal "/", @request.path - + + @request.set_REQUEST_URI nil @request.relative_url_root = nil @request.env['PATH_INFO'] = "/" @request.env['SCRIPT_NAME'] = "/dispatch.cgi" assert_equal "/", @request.request_uri - assert_equal "/", @request.path + assert_equal "/", @request.path + @request.set_REQUEST_URI nil @request.relative_url_root = nil @request.env['PATH_INFO'] = "/hieraki/" @request.env['SCRIPT_NAME'] = "/hieraki/dispatch.cgi" assert_equal "/hieraki/", @request.request_uri - assert_equal "/", @request.path - + assert_equal "/", @request.path + @request.set_REQUEST_URI '/hieraki/dispatch.cgi' @request.relative_url_root = '/hieraki' - assert_equal "/dispatch.cgi", @request.path + assert_equal "/dispatch.cgi", @request.path @request.relative_url_root = nil @request.set_REQUEST_URI '/hieraki/dispatch.cgi' @request.relative_url_root = '/foo' - assert_equal "/hieraki/dispatch.cgi", @request.path + assert_equal "/hieraki/dispatch.cgi", @request.path @request.relative_url_root = nil # This test ensures that Rails uses REQUEST_URI over PATH_INFO @@ -226,7 +232,7 @@ class RequestTest < Test::Unit::TestCase assert_equal "/some/path", @request.request_uri assert_equal "/some/path", @request.path end - + def test_host_with_port @request.host = "rubyonrails.org" -- cgit v1.2.3