2011-04-19 24 views

回答

11

兩個Ruby的內置URI和Addressable寶石,使這短暫的工作。我更喜歡Addressable,因爲它更加全面,但是內置了URI。

require 'uri' 

URI.join('http://pupeno.com/blog', '/about') # => #<URI::HTTP:0x00000101098538 URL:http://pupeno.com/about> 

require 'addressable/uri' 

uri = Addressable::URI.parse('http://pupeno.com/blog') 
uri.join('/about') # => #<Addressable::URI:0x806704a0 URI:http://pupeno.com/about> 

它的使用提供的join方法是一個好主意,因爲他們做一些健全檢查,以確保返回的地址是明智的。如果您有相對URL,直接分配給路徑可能會破壞事情,只需替換舊路徑即可。 join將考慮到這一點,並將取代或合併,以適合的爲準。

1

這將做到這一點:

require 'uri' 
url=URI.parse('http://pupeno.com/blog') 
=> #<URI::HTTP:0x00000100e35368 URL:http://pupeno.com/blog> 
ruby-1.9.2-p0 > url.path="/about" 
=> "/about" 
ruby-1.9.2-p0 > url 
=> #<URI::HTTP:0x00000100e35368 URL:http://pupeno.com/about> 
+0

該方法的問題是第二個字符串也可能是絕對URI。 – Pablo 2011-04-20 05:55:16

+0

哎呀,我從描述中不理解這一點 – eggie5 2011-04-20 06:12:35