Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed relative urls support for lighttpd #1048 [Nicholas Seckar/mazna…

…wak@nerim.net]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1450 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit 92473b8f961218284340f4d045ba8fe3cbd694b1 1 parent 959707b
@dhh dhh authored
View
6 actionpack/CHANGELOG
@@ -1,8 +1,8 @@
*SVN*
-* Correct distance_of_time_in_words for integer arguments and make the second ar
-g optional, treating the first arg as a duration in seconds. #1458 [madrobby <t
-homas@fesch.at>]
+* Fixed relative urls support for lighttpd #1048 [Nicholas Seckar/maznawak@nerim.net]
+
+* Correct distance_of_time_in_words for integer arguments and make the second arg optional, treating the first arg as a duration in seconds. #1458 [madrobby <thomas@fesch.at>]
* Fixed query parser to deal gracefully with equal signs inside keys and values #1345 [gorou].
Example: /?sig=abcdef=:foobar=&x=y will pass now.
View
17 actionpack/lib/action_controller/request.rb
@@ -135,12 +135,17 @@ def ssl?
# Returns the interpreted path to requested resource after all the installation directory of this application was taken into account
def path
path = (uri = request_uri) ? uri.split('?').first : ''
- path[relative_url_root.length..-1] # cut off the part of the url which leads to the installation directory of this app
+
+ # Cut off the path to the installation directory if given
+ if (root = relative_url_root) then path[root.length..-1]
+ else path
+ end
end
- # Returns the path minus the web server relative installation directory
- def relative_url_root(force_reload = false)
- @@relative_url_root ||= File.dirname(env["SCRIPT_NAME"].to_s).gsub(/(^\.$|^\/$)/, '')
+ # Returns the path minus the web server relative installation directory.
+ # This method returns nil unless the web server is apache.
+ def relative_url_root
+ @@relative_url_root ||= File.dirname(env["SCRIPT_NAME"].to_s).gsub(/(^\.$|^\/$)/, '') if server_software == 'apache'
end
def port
@@ -165,6 +170,10 @@ def path_parameters
@path_parameters ||= {}
end
+ def server_software
+ (env['SERVER_SOFTWARE'] && /^([a-zA-Z]+)/ =~ env['SERVER_SOFTWARE']) ? $1.downcase : nil
+ end
+
#--
# Must be implemented in the concrete request
#++
View
17 actionpack/test/controller/request_test.rb
@@ -66,6 +66,11 @@ def test_port_string
end
def test_relative_url_root
+ @request.env['SERVER_SOFTWARE'] = 'lighttpd/1.2.3'
+ assert_nil @request.relative_url_root, "relative_url_root should be disabled on lighttpd"
+
+ @request.env['SERVER_SOFTWARE'] = 'apache/1.2.3 some random text'
+
@request.env['SCRIPT_NAME'] = nil
assert_equal "", @request.relative_url_root
@@ -85,6 +90,8 @@ def test_relative_url_root
end
def test_request_uri
+ @request.env['SERVER_SOFTWARE'] = 'Apache 42.342.3432'
+
@request.relative_url_root = nil
@request.set_REQUEST_URI "http://www.rubyonrails.org/path/of/some/uri?mapped=1"
assert_equal "/path/of/some/uri?mapped=1", @request.request_uri
@@ -193,4 +200,14 @@ def test_host_with_port
@request.port = 81
assert_equal "rubyonrails.org:81", @request.host_with_port
end
+
+ def test_server_software
+ assert_equal nil, @request.server_software
+
+ @request.env['SERVER_SOFTWARE'] = 'Apache3.422'
+ assert_equal 'apache', @request.server_software
+
+ @request.env['SERVER_SOFTWARE'] = 'lighttpd(1.1.4)'
+ assert_equal 'lighttpd', @request.server_software
+ end
end
Please sign in to comment.
Something went wrong with that request. Please try again.