2015-02-09 3 views
1

Мы запускаем приложение Rails 3.2.11 на Heroku, и мы видим периодические проблемы с браузерами Mac/Safari. Когда пользователь нажимает ссылку или вводит ссылку вручную в Safari без конечной косой черты (например, http://myapp.com/product/1), браузер возвращает код состояния 404. Если это происходит с одним пользователем, другой пользователь на другом Mac может перейти к идентичной ссылке без проблем.Ошибка перенаправления Rails на Safari

Если пользователь добавляет конечную косую черту (например, http://myapp.com/product/1/), тогда ссылка будет работать правильно. В первый раз он будет работать не только правильно, но и будет продолжать работать должным образом в любое время после использования ссылки.

+0

Вы можете разместить часть журналов сервера? Или код из контроллера продукта? – JeffD23

+1

Это не выглядит ни Rails, ни проблема с браузером, а возможна некорректная конфигурация с использованием HTTP-сервера, который вы используете. Что вы используете перед своим приложением? Какие-либо перезаписи на месте? – dgilperez

+0

Я использую Heroku, который другой мудрый, я не уверен. Это не код в моем контроллере продуктов, потому что есть сообщения, которые случаются случайным образом и на других контроллерах. – sonnyhe2002

ответ

1

Моим первым инстинктом было бы обвинить Safari (вроде) и сказать, что исходный запрос (без «/») приводит к переадресации с сервера, что Safari некорректно преследует.

Единственный способ действительно отслеживать это - следить за журналами сервера (или обнюхивать трафик клиента), чтобы увидеть, что действительно происходит между клиентом и сервером.

0

Решение состоит в том, чтобы заставить конечную косую черту. В зависимости от настройки сервера вы можете добавить некоторые правила перезаписи.

Если вы работаете апача это будет выглядеть примерно так:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !example.php 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301] 

Для Nginx было бы

server { 
    listen 80; 
    server_name www.mysite.com; 
    rewrite ^(.*[^/])$ $1/ permanent; 
} 
Смежные вопросы