Heroku, как перенаправить http: // на http://www - PullRequest
21 голосов

Ответы [ 7 ]

35 голосов
/ 08 сентября 2012

Лучше всего было бы настроить перенаправление с вашим DNS-провайдером, так что это происходит задолго до того, как какой-либо запрос достигает вашего сервера.Из Heroku Dev Center :

перенаправление поддоменов приводит к перенаправлению 301 на указанный поддомен для всех запросов в пустой домен, поэтому все текущие и будущие запросы правильно маршрутизируются иполное имя хоста www отображается в поле местоположения пользователя.

DNSimple обеспечивает удобное перенаправление URL, которое можно увидеть здесь, перенаправляя с голого домена heroku-sslendpoint.com на поддомен www.heroku-sslendpoint.com.enter image description here

Для правильной конфигурации в Heroku поддомен www должен быть ссылкой на запись CNAME на yourappname.herokuapp.com.

Это делает не просто DNSimple.Мой провайдер DNS - 123 Reg , и они поддерживают его, но называют его web forwarding.

10 голосов
/ 22 марта 2011

Я бы рекомендовал сделать это намного раньше в жизненном цикле запроса.Если бы вы использовали Apache, вы бы добавили перезапись URL в файл VirtualHosts.На Heroku вам нужно добавить некоторое промежуточное программное обеспечение Rack.

Здесь как пример наоборот (т.е. www.example.org -> example.org).Я не думаю, что у вас будут большие проблемы с заменой его на ваш вариант использования.

Таким образом, запросы не будут отображаться в вашем журнале и не требуют полного анализа запросов Rails.

4 голосов
/ 22 марта 2011

Мое решение:

Terminal:

heroku addons:add custom_domains:basic
heroku domains:add www.vinderhimlen.dk
heroku domains:add vinderhimlen.dk

А потом (http://devcenter.heroku.com/articles/custom-domains):

class ApplicationController
  before_filter :ensure_domain

  APP_DOMAIN = 'www.vinderhimlen.dk'

  def ensure_domain
    if request.env['HTTP_HOST'] != APP_DOMAIN
      # HTTP 301 is a "permanent" redirect
      redirect_to "http://#{APP_DOMAIN}", :status => 301
    end
  end
end
2 голосов
/ 22 марта 2011

Если вы используете контроллер действий, просто используйте redirect_to:

redirect_to "http://www.vinderhimlen.dk"
1 голос
/ 22 марта 2011

Обычно вы делаете это на уровне HTTP-сервера, используя что-то вроде модуля mod_rewrite Apache, чтобы это происходило до того, как запрос достигнет стека Rails. Однако Heroku не дает вам доступа к их конфигурации HTTP-сервера, поэтому необходима альтернатива.

Я бы рекомендовал взглянуть на Refraction , который является промежуточным программным обеспечением Rack, предназначенным для замены mod_rewrite. Он позволяет вам писать свои правила перезаписи, используя старый добрый читаемый код Ruby, и это все же быстрее, чем использование самого Rails для этой задачи.

1 голос
/ 22 марта 2011

Вы также должны добавить домен www.

heroku domains:add www.vinderhimlen.dk

0 голосов
/ 22 марта 2011

См. Ответ правосудия в этой ТАКИЕ статье - его метод для этого ясен, прост, эффективен и настраивается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...