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)