Как перенаправить http://vinderhimlen.dk на http://www.vinderhimlen.dk ?
Heroku как перенаправить http:// на http://www
- Не быть придирчивым или что-то в этом роде, но konkurrence пишется konkurrence. Кажется, на странице это пишется двояко... 22.03.2011
- возможный дубликат Как перенаправить домены на героку? 22.03.2011
Ответы:
Лучше всего настроить перенаправление у вашего DNS-провайдера, чтобы оно происходило задолго до того, как какой-либо запрос достигнет вашего сервера. Из Центра разработки Heroku:
Перенаправление поддомена приводит к постоянному перенаправлению 301 на указанный поддомен для всех запросов к «голому» домену, поэтому все текущие и будущие запросы правильно маршрутизируются, а полное имя хоста www отображается в поле местоположения пользователя.
DNSimple предоставляет удобную переадресацию URL-адресов, показанную здесь, перенаправляя с открытого домена
heroku-sslendpoint.com
на поддоменwww.heroku-sslendpoint.com
.Для правильной настройки Heroku поддомен www должен быть ссылкой записи CNAME на yourappname.herokuapp.com.
Это делает не только DNSimple. Мой провайдер DNS — 123 Reg, и они поддерживают его, но называют его web forwarding
.
Я бы рекомендовал сделать это намного раньше в жизненном цикле запроса. Если бы вы использовали Apache, вы бы добавили URL Rewrite в файл VirtualHosts. На Heroku вам нужно добавить промежуточное ПО Rack.
Здесь в качестве примера наоборот (т.е. www.example.org
-> example.org
). Я не думаю, что у вас возникнут большие проблемы с изменением его на ваш вариант использования.
Таким образом, запросы не будут отображаться в вашем журнале, и им не потребуется весь разбор запросов Rails.
www.
как канонический. И whatever-you-use.herokuapp.com
тоже перенаправит туда без лишних усилий. 08.09.2012 Мое решение:
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
Предполагая, что вы используете контроллер действий, просто используйте redirect_to
:
redirect_to "http://www.vinderhimlen.dk"
Вы также должны добавить домен www.
heroku domains:add www.vinderhimlen.dk
Обычно вы делаете это на уровне HTTP-сервера, используя что-то вроде модуля Apache mod_rewrite
, чтобы это происходило еще до того, как запрос достигнет стека Rails. Однако Heroku не дает вам доступа к конфигурации своего HTTP-сервера, поэтому необходима альтернатива.
Я бы порекомендовал взглянуть на Refraction, промежуточное ПО Rack, предназначенное для заменить mod_rewrite
. Он позволяет вам писать свои правила перезаписи, используя старый добрый читаемый код Ruby, и это все еще быстрее, чем использование самого Rails для этой задачи.
См. ответ Джастиса в этой SO статье - его метод для этого ясен , простой, эффективный и настраиваемый.
www.
на голый домен) работает точно так же. 30.01.2013