![](https://dhampik.ru/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBEUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--47b6450e6df8626888fb21214937dcf69d7e01cb/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBPZ2h3Ym1jNkVuSmxjMmw2WlY5MGIxOW1hWFJiQjJrQmdHa0JnQT09IiwiZXhwIjpudWxsLCJwdXIiOiJ2YXJpYXRpb24ifX0=--97dc6d68b366554a9907e9783c9a0c17c15569ec/rails-routes-www-non-www-redirect.png)
В большинстве случаев редирект с поддомена www на домен второго уровня (или обратно) реализуется на уровне web-сервера (например, apache или nginx). Вот пример редиректа, настраиваемого в конфиге nginx:
if ($host = 'www.dhampik.ru') { rewrite ^/(.*)$ http://dhampik.ru/$1 permanent; }
Однако такая возможность имеется не всегда - иногда просто нет доступа к настройкам web-сервера, например, если вы используете хостинг heroku. В этом случае может помочь настройка редиректа средствами роутинга в Ruby on Rails.
Редирект с поддомена www на домен 2го уровня делается следующими строчками в файле config/routes.rb
:
constraints(host: 'www.example.com') do root to: redirect("http://example.com/"), as: 'root_redirect' match '/*path', to: redirect {|params| "http://example.com/#{params[:path]}"}, via: :all end
Следует отметить, что обязательно необходимо 2 записи для корня и для всех остальных адресов. Кроме того обязательно указывать алиас as: 'root_redirect'
, так как у вас скорее всего задан другой корневой роут и возникнет конфликт, если этого не сделать. Также для правила match
в последних версиях рельс обязательно явное указание разрешенных методов. В нашем случае указано, что редирект нужно делать для всех методов - GET, POST и др.
Аналогичным способом делается и редирект в обратную сторону. Что важнее — адрес с www или же без него — решать вам. Хотя лично я предпочитаю адрес без www — он и короче и современнее, хотя споров на эту тему много.
UPD: кажется, что у reg.ru все же нельзя настроить CNAME для домена второго уровня, как это описано ниже, ибо на следующий день пришло сообщение о том, что яндекс.почта для домена отвалилась из-за неправильной настройки DNS. И вообще это запрещено спецификацией и порождает конфликты. А некоторые регистраторы предоставляют специальные инструменты для обхода этого.
Подобная настройка в совокупности с возможностью указать @
в CNAME
для доменов второго уровня у некоторых хостеров, например, reg.ru (несмотря на предупреждение от heroku) позволит немного сэкномить на услуге web-forwarding.