Domain-Name-System
CNAME 到 Heroku 應用程序導致 301 重定向
TL;DR:我希望我的自定義域顯示在地址欄中,而不是 CNAME。
我有一個託管在 Heroku 上的應用程序,地址為try-elixir-phoenix.herokuapp.com。
我從 Namecheap 購買了域名,並在那裡配置了 CNAME 條目:
www.tryelixir.online CNAME try-elixir-phoenix.herokuapp.com.
我還在heroku中配置了自定義域:
$ heroku domains === try-elixir-phoenix Heroku Domain try-elixir-phoenix.herokuapp.com === try-elixir-phoenix Custom Domains Domain Name DNS Target ──────────────────── ──────────────────────────────── tryelixir.online try-elixir-phoenix.herokuapp.com www.tryelixir.online try-elixir-phoenix.herokuapp.com
但是如果我 curl 我的自定義域,我會得到一個 301 重定向:
$ curl --head http://www.tryelixir.online HTTP/1.1 301 Moved Permanently Connection: keep-alive Server: Cowboy Date: Thu, 25 Feb 2016 15:11:01 GMT Content-Length: 0 Cache-Control: max-age=0, private, must-revalidate Location: https://try-elixir-phoenix.herokuapp.com/ Via: 1.1 vegur
這也意味著使用者看到的是
herokuapp.com
URL,而不是我的自定義 URL。即使您設置了自定義域,您應用的 Heroku 域也將始終保持活動狀態。如果您希望使用者獨占使用自定義域,您的應用應發送 HTTP 狀態 301 Moved Permanently 以告知 Web 瀏覽器使用自定義域。Host HTTP 請求標頭欄位將顯示使用者嘗試訪問的域;如果該欄位是 example.herokuapp.com,則發送重定向。
以上是否適用於我?
事實證明,重定向發生在應用程序級別。Heroku 的支持證實他們的路由器沒有添加任何重定向。
如果您按照說明操作,那麼在添加自定義域之前,您需要更新配置:
url: [scheme: "https", host: "mysterious-meadow-6277.herokuapp.com", port: 443], force_ssl: [rewrite_on: [:x_forwarded_proto]]