В большинстве случаев редирект с поддомена 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.