Skip to content
Browse files

Set request.env['REQUEST_URI'] when absent.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5895 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent 89b472a commit fe736a54f914b7cf406988f42df6c5c129d821a5 @jeremy jeremy committed Jan 12, 2007
Showing with 20 additions and 12 deletions.
  1. +7 −5 actionpack/lib/action_controller/request.rb
  2. +13 −7 actionpack/test/controller/request_test.rb
View
12 actionpack/lib/action_controller/request.rb
@@ -145,19 +145,21 @@ def raw_post
@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
View
20 actionpack/test/controller/request_test.rb
@@ -174,48 +174,54 @@ def test_request_uri
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 @@ def test_request_uri
assert_equal "/some/path", @request.request_uri
assert_equal "/some/path", @request.path
end
-
+
def test_host_with_port
@request.host = "rubyonrails.org"

0 comments on commit fe736a5

Please sign in to comment.
Something went wrong with that request. Please try again.