2010-06-19 34 views
7

Heroku kullanıyorum ve uyguladığım için birkaç özel alan ekledim, yani myapp.com ve www.myapp.com.www altdomain için CNAME yönlendirmesiyle Heroku özel etki alanı ayarlanıyor

GoDaddy'deki DNS'im, üç ayrı Heroku IP'sine işaret eden '@' için üç A kaydı ve proxy.heroku.com'a işaret eden 'www' alt etki alanı için bir CNAME vardır.

Ne yapmak istediğim, www.myapp.com numaralı trafiğe myapp.com numaralı trafiğe yeniden yönlendirmektir. CNAME'yi '@' olarak ayarlamayı denedim, ancak bu hala aynı alanda kalıyor. Bu yönlendirmeyi DNS düzeyinde zorlayabilmemin bir yolu var mı?

cevap

8

CNAME bir yönlendirici değil, yalnızca etki alanınız için kurallı bir addır. Bu, işaret ettiği alan gibi davranması anlamına gelir (sizin durumunuzda myapp.com). Tarayıcınız myapp.com'un sahip olduğu IP adresini alır ve ona bir istek gönderir. Yönlendirmeler HTTP düzeyinde veya üzerinde gerçekleştirilir. Bunu örneğin uygulamanızda yapabilir veya sadece bunun için başka bir basit uygulama oluşturabilirsiniz. çok daha hızlı Aynı yapacağını, hangi

# in your ApplicationController 
before_filter :strip_www 

def strip_www 
    if request.env["HTTP_HOST"] == "www.myapp.com" 
    redirect_to "http://myapp.com/" 
    end 
end 

Yoksa kullanabilirsiniz metal raylar, ancak: Burada

uygulamanızda doğrudan yönlendirme yapmak için basit bir örnek

# app/metal/hostname_redirector.rb 
class HostnameRedirector 
    def self.call(env) 
    if env["HTTP_HOST"] == "www.myapp.com" 
     [301, {"Location" => "http://myapp.com/"}, ["Found"]] 
    else 
     [404, {"Content-Type" => "text/html"}, ["Not Found"]] 
    end 
    end 
end 

Yapabilirsin Ayrıca, tüm istekleri ana bilgisayar adının önünde www. ile eşleştirmek için bir Regex kullanın.

1

Ve burada arama motorlarının indeksleme yinelenen içerik engelleyen Bu aynı zamanda alanınız.com için domain.herokuapp.com yönlendirir node.js

$ heroku config:set APP_HOST=yourdomain.com 

app.configure('production', function() { 
    // keep this relative to other middleware, e.g. after auth but before 
    // express.static() 
    app.get('*', function(req, res, next) { 
     if (req.headers.host != process.env.APP_HOST) { 
      res.redirect('http://' + process.env.APP_HOST + req.url, 301) 
     } else { 
      next() 
     } 

    }) 
    app.use(express.static(path.join(application_root, 'static'))) 
}) 

için bir çözümdür.

0
Ayrıca herhangi Raf uygulamasında, rack-canonical-host mücevher yükleme ve Raf yapılandırma dosyasında bu koyarak oldukça kolayca yapabilirsiniz

:

require 'rack-canonical-host' 
use Rack::CanonicalHost, 'myapp.com' 
+1

Büyük öneri, ancak bu taş bir çalışacak sanmıyorum uygulamanızın client1.com, client2.com, vb. desteklemesi gereken çoklu kiracı durumu. – cman77