Emre Emre - 1 month ago 11
HTTP Question

Website not opening google search http to https

We have a website called viravira.co. Our domain is on dnsimple and server is on heroku. We configured all necessary steps with ssl both on heroku & dnsimple.

When you type any of these 4 urls to url bar it works.

But the problem is, when I search on google as

viravira.co
and click on the link, it is not opening especially with internet explorer & safari. It gives 404 error here it is;

enter image description here
Error from the console;

ActionController::RoutingError (No route matches "https://www.google.com.tr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwiU0JX39YnQAhWJEiwKHSq2BpQQFggcMAA&url=https%3A%2F%2Fwww.viravira.co%2F&usg=AFQjCNFg0D1KFk0WGvYOfUoVzNm19KDBYw&bvm=bv.137132246,d.bGg"):


I have added all 4 websites to google search console as;

https://www.viravira.co
https://viravira.co
http://www.viravira.co
http://viravira.co


Its been more than 24 hours btw. For internet explorer I tried to remove history and flush dns config. Still no luck.

EDIT:
There is no checks as referrer. But there is a code to show header or not as in application controller but I do not think this is relevant;

before_filter :set_locale, :location_action_name
def location_action_name
if !logged_in?
url = Rails.application.routes.recognize_path(request.referrer)
@last_controller = url[:controller]
@last_action = url[:action]


end
end


EDIT2:
I removed the below code and pushed to heroku now it works. But why is that?

Answer

The issue is caused by the following code fragment:

  url = Rails.application.routes.recognize_path(request.referrer)
  @last_controller = url[:controller]
  @last_action = url[:action]

As far as I remember (and I guess, given that recognize_path was removed in recent versions of Rails) recognize_path raises a routing error in case it can't find the path.

You are passing arbitrary strings to the function, but the function only recognizes paths internally described in the router.

request.referrer would return 3 different types of URL:

  1. blank: when no referrer
  2. external URL: when the visitor clicks elsewhere and reaches your app
  3. internal URL: when the visitor clicks somewhere in your app

In all cases except the third one, recognize_path will raise an error. The error will be caught by the default Rails handler and displayed as 404 (an unrecognized route results in a 404 in production).

I'm not sure what location_action_name is supposed to do, but as it is implemented now it's very fragile and in most cases it will result into causing 404 responses in your app.

Comments