Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 1211

Show
Ignore:
Timestamp:
04/18/05 15:43:07 (3 years ago)
Author:
david
Message:

Added support for web servers that use PATH_INFO instead of REQUEST_URI like IIS #1014 Seckar

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/actionpack/CHANGELOG

    r1208 r1211  
    11*SVN* 
     2 
     3* Added support for web servers that use PATH_INFO instead of REQUEST_URI like IIS #1014 [BradG/Nicholas Seckar] 
    24 
    35* Added graceful handling of PUT, DELETE, and OPTIONS requests for a complete coverage of REST functionality #1136 [joshknowles@gmail.com] 
  • trunk/actionpack/lib/action_controller/cgi_process.rb

    r829 r1211  
    4949    def query_string 
    5050      return @cgi.query_string unless @cgi.query_string.nil? || @cgi.query_string.empty? 
    51       parts = env['REQUEST_URI'].split('?') 
     51      unless env['REQUEST_URI'].nil? 
     52        parts = env['REQUEST_URI'].split('?') 
     53      else 
     54        return env['QUERY_STRING'] || '' 
     55      end       
    5256      parts.shift 
    5357      return parts.join('?') 
  • trunk/actionpack/lib/action_controller/request.rb

    r1194 r1211  
    7575     
    7676    def request_uri 
    77       (%r{^\w+\://[^/]+(/.*|$)$} =~ env['REQUEST_URI']) ? $1 : env['REQUEST_URI'] # Remove domain, which webrick puts into the request_uri. 
    78     end 
     77      unless env['REQUEST_URI'].nil? 
     78        (%r{^\w+\://[^/]+(/.*|$)$} =~ env['REQUEST_URI']) ? $1 : env['REQUEST_URI'] # Remove domain, which webrick puts into the request_uri. 
     79      else  # REQUEST_URI is blank under IIS - get this from PATH_INFO and SCRIPT_NAME 
     80        script_filename = env["SCRIPT_NAME"].to_s.match(%r{[^/]+$}) 
     81        request_uri = env["PATH_INFO"] 
     82        request_uri.sub!(/#{script_filename}\//, '') unless script_filename.nil? 
     83        request_uri += '?' + env["QUERY_STRING"] unless env["QUERY_STRING"].nil? || env["QUERY_STRING"].empty? 
     84        return request_uri 
     85      end 
     86     end 
    7987 
    8088    def protocol 
  • trunk/actionpack/test/controller/request_test.rb

    r945 r1211  
    8484    @request.env['SCRIPT_NAME'] = "/collaboration/hieraki/dispatch.cgi" 
    8585    assert_equal "/collaboration/hieraki/books/edit/2", @request.request_uri 
    86     assert_equal "/books/edit/2", @request.path     
     86    assert_equal "/books/edit/2", @request.path 
     87   
     88    # The following tests are for when REQUEST_URI is not supplied (as in IIS) 
     89    @request.set_REQUEST_URI nil 
     90    @request.env['PATH_INFO'] = "/path/of/some/uri?mapped=1" 
     91    @request.env['SCRIPT_NAME'] = nil #"/path/dispatch.rb" 
     92    assert_equal "/path/of/some/uri?mapped=1", @request.request_uri 
     93    assert_equal "/path/of/some/uri", @request.path 
     94 
     95    @request.env['PATH_INFO'] = "/path/of/some/uri?mapped=1" 
     96    @request.env['SCRIPT_NAME'] = "/path/dispatch.rb" 
     97    assert_equal "/path/of/some/uri?mapped=1", @request.request_uri 
     98    assert_equal "/of/some/uri", @request.path 
     99 
     100    @request.env['PATH_INFO'] = "/path/of/some/uri" 
     101    @request.env['SCRIPT_NAME'] = nil 
     102    assert_equal "/path/of/some/uri", @request.request_uri 
     103    assert_equal "/path/of/some/uri", @request.path 
     104 
     105    @request.env['PATH_INFO'] = "/" 
     106    assert_equal "/", @request.request_uri 
     107    assert_equal "/", @request.path 
     108 
     109    @request.env['PATH_INFO'] = "/?m=b" 
     110    assert_equal "/?m=b", @request.request_uri 
     111    assert_equal "/", @request.path 
     112     
     113    @request.env['PATH_INFO'] = "/" 
     114    @request.env['SCRIPT_NAME'] = "/dispatch.cgi" 
     115    assert_equal "/", @request.request_uri 
     116    assert_equal "/", @request.path     
     117 
     118    @request.env['PATH_INFO'] = "/hieraki/" 
     119    @request.env['SCRIPT_NAME'] = "/hieraki/dispatch.cgi" 
     120    assert_equal "/hieraki/", @request.request_uri 
     121    assert_equal "/", @request.path     
     122 
     123    # This test ensures that Rails uses REQUEST_URI over PATH_INFO 
     124    @request.env['REQUEST_URI'] = "/some/path" 
     125    @request.env['PATH_INFO'] = "/another/path" 
     126    @request.env['SCRIPT_NAME'] = "/dispatch.cgi" 
     127    assert_equal "/some/path", @request.request_uri 
     128    assert_equal "/some/path", @request.path 
     129 
    87130 
    88131  end