有没有办法知道页面请求是否来自同一个应用程序?

Cri*_*ian 4 ruby-on-rails request referrer ruby-on-rails-3

在Rails3中,有没有办法检查我现在呈现的页面是否是从同一个应用程序请求的,而不使用硬编码的域名?

我目前有:

def back_link(car_id = '')
  # Check if search exists
  uri_obj = URI.parse(controller.request.env["HTTP_REFERER"]) if controller.request.env["HTTP_REFERER"].present?
  if uri_obj.present? && ["my_domain.com", "localhost"].include?(uri_obj.host) && uri_obj.query.present? && uri_obj.query.include?('search')
    link_to '◀ '.html_safe + t('back_to_search'), url_for(:back) + (car_id.present? ? '#' + car_id.to_s : ''), :class => 'button grey back'
  end
end
Run Code Online (Sandbox Code Playgroud)

但这并没有检查"www".在域名和所有其他可能的情况下.

如果我能找到上一页(引用者)中使用的特定控制器和操作,那也很好.

Mat*_*udy 12

我觉得你看错了.

如果你环顾网络,找到一个带有搜索功能的网站,然后点击链接,你会看到一个显示搜索内容的参数.

这是一个很好的方法.

这样做HTTP_REFERER似乎有点脆弱,并且不会起作用,例如,从书签或发布的链接.

例如.

/cars/12?from_search=sports+cars
Run Code Online (Sandbox Code Playgroud)

然后你可以抬头看看 params[:from_search]

如果你真的需要这样做,HTTP_REFERER你可能不必担心子域名.只是;

def http_referer_uri
  request.env["HTTP_REFERER"] && URI.parse(request.env["HTTP_REFERER"])
end

def refered_from_our_site?
  if uri = http_referer_uri
    uri.host == request.host
  end
end

def refered_from_a_search?
  if refered_from_our_site?
    http_referer_uri.try(:query)['search']
  end
end
Run Code Online (Sandbox Code Playgroud)