How do I get the current absolute URL in Ruby on Rails?

Jakub Arnold Source

How can I get the current absolute URL in my Ruby on Rails view?

The request.request_uri only returns the relative URL.



answered 8 years ago ghoppe #1

If by relative, you mean just without the domain, then look into request.domain.

answered 8 years ago Jaime Bellmyer #2

For Rails 3.2 or Rails 4+

You should use request.original_url to get the current URL.

This method is documented at original_url method, but if you're curious, the implementation is:

def original_url
  base_url + original_fullpath

For Rails 3:

You can write "#{request.protocol}#{request.host_with_port}#{request.fullpath}", since request.url is now deprecated.

For Rails 2:

You can write request.url instead of request.request_uri. This combines the protocol (usually http://) with the host, and request_uri to give you the full address.

answered 8 years ago James M #3

I think request.domain would work, but what if you're in a sub directory like Something like this could work:

<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>

Change the parameters based on your path structure.

Hope that helps!

answered 8 years ago grosser #4

You can add this current_url method in the ApplicationController to return the current URL and allow merging in other parameters

# + current_url( :page => 3 )
# =
def current_url(overwrite={})
    url_for :only_path => false, :params => params.merge(overwrite)

Example Usage:

current_url --> http://...
current_url(:page=>4) --> http://...&page=4

answered 7 years ago ecoologic #5

DEPRECATION WARNING: Using #request_uri is deprecated. Use fullpath instead.

answered 7 years ago mcr #6

I think that the Ruby on Rails 3.0 method is now request.fullpath.

answered 7 years ago Ken Earley #7

It looks like request_uri is deprecated in Ruby on Rails 3.

Using #request_uri is deprecated. Use fullpath instead.

answered 7 years ago Lucas Renan #8

In Ruby on Rails 3.1.0.rc4:


answered 7 years ago Duke #9

For Ruby on Rails 3:


I fired up a debugger session and queried the request object:


answered 7 years ago grzuy #10

You could use url_for(:only_path => false)

answered 6 years ago Dorian #11

I needed the application URL but with the subdirectory. I used:

root_url(:only_path => false)

answered 6 years ago Yuri Barbashov #12


And you can easily add some new parameter:

url_for(params.merge(:tag => "lol"))

answered 6 years ago Tim Santeford #13

This works for Ruby on Rails 3.0 and should be supported by most versions of Ruby on Rails:


answered 6 years ago msroot #14

(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)

answered 6 years ago Frans #15

None of the suggestions here in the thread helped me sadly, except the one where someone said he used the debugger to find what he looked for.

I've created some custom error pages instead of the standard 404 and 500, but request.url ended in /404 instead of the expected /non-existing-mumbo-jumbo.

What I needed to use was


answered 6 years ago Serge Seletskyy #16

Using Ruby 1.9.3-p194 and Ruby on Rails 3.2.6:

If request.fullpath doesn't work for you, try request.env["HTTP_REFERER"]

Here's my story below.

I got similar problem with detecting current URL (which is shown in address bar for user in her browser) for cumulative pages which combines information from different controllers, for example, http://localhost:3002/users/1/history/issues.

The user can switch to different lists of types of issues. All those lists are loaded via Ajax from different controllers/partials (without reloading).

The problem was to set the correct path for the back button in each item of the list so the back button could work correctly both in its own page and in the cumulative page history.

In case I use request.fullpath, it returns the path of last JavaScript request which is definitely not the URL I'm looking for.

So I used request.env["HTTP_REFERER"] which stores the URL of the last reloaded request.

Here's an excerpt from the partial to make a decision

- if request.env["HTTP_REFERER"].to_s.scan("history").length > 0
  - back_url = user_history_issue_path(@user, list: "needed_type")
- else
  - back_url = user_needed_type_issue_path(@user)
- remote ||= false
=link_to t("static.back"), back_url, :remote => remote

answered 5 years ago Ahmad hamza #17

To get the absolute URL which means that the from the root it can be displayed like this

<%= link_to 'Edit', edit_user_url(user) %>

The users_url helper generates a URL that includes the protocol and host name. The users_path helper generates only the path portion.

users_url: http://localhost/users
users_path: /users

answered 5 years ago Victor S #18

if you want to be specific, meaning, you know the path you need:

link_to current_path(@resource, :only_path => false), current_path(@resource)

answered 5 years ago mikrobi #19

In Rails 3 you can use


answered 5 years ago Mike #20

If you're using Rails 3.2 or Rails 4 you should use request.original_url to get the current URL.

Documentation for the method is at but if you're curious the implementation is:

def original_url
  base_url + original_fullpath

answered 5 years ago Idan Wender #21

You can use the ruby method:


which will get the full path with base url:


answered 5 years ago Pankhuri #22

For rails 3 :


answered 4 years ago Satishakumar Awati #23


works in rails 2.3.4 tested and do not know about other versions.

answered 4 years ago uma #24

you can use any one for rails 3.2:


I think it will work every where


answered 4 years ago user3355933 #25

you can get absolute url by calling:




answered 3 years ago Arvind singh #26

Rails 4.0

you can use request.original_url, output will be as given below example

get "/articles?page=2"

request.original_url # => ""

answered 3 years ago Nerve #27

To get the request URL without any query parameters.

def current_url_without_parameters
  request.base_url + request.path

answered 3 years ago user3118220 #28

Rails 4


def absolute_url
  request.base_url + request.original_fullpath

Action Mailer Notable changes in 4.2 release:

link_to and url_for generate absolute URLs by default in templates, it is no longer needed to pass only_path: false. (Commit)


If you use the _url suffix, the generated URL is absolute. Use _path to get a relative URL.

<%= link_to "Home", root_url %>

For More Details, go to:

answered 3 years ago Ali Hassan Mirza #29

You can use:




Hopefully it will resolve your problem.


answered 2 years ago Robin Garg #30

You can either use




to get the current URL.

answered 2 years ago RaK427 #31

You can set a variable to URI.parse(current_url), I don't see this proposal here yet and it works for me.

answered 2 years ago Amit #32

For Rails 3.2 or Rails 4 Simply get in this way "request.original_url" Reference:

For Rails 3 As request.url is deprecated.We can get absolute path by concatenating "#{request.protocol}#{request.host_with_port}#{request.fullpath}"

For Rails 2 request.url

answered 3 months ago V K Singh #33

For Rails 3.x and up:


For Rails 3.2 and up:


Because in rails 3.2 and up:

request.original_url = request.base_url + request.original_fullpath

For more info, plese visit

comments powered by Disqus