Ответ 1
Не сейчас. Вам необходимо создать контроллер, а затем в контроллере:
defmodule MyApp.RootController do
use MyApp.Web, :controller
plug :action
def index(conn, _params) do
redirect conn, to: "/foobar.html"
end
end
Я хочу запустить угловую переднюю часть с фениксом для моего сайта. Я хотел бы, чтобы мой корневой маршрут направлял пользователя на предварительно созданную страницу в статическом каталоге, который содержит мой клиент angular, а затем использует phoenix для запуска API. Я сделал это в прошлом с рубинами на рейках по маршруту, подобным этому:
get '/', to: redirect('/foobar.html')
Есть ли способ сделать что-то подобное с фениксом?
Не сейчас. Вам необходимо создать контроллер, а затем в контроллере:
defmodule MyApp.RootController do
use MyApp.Web, :controller
plug :action
def index(conn, _params) do
redirect conn, to: "/foobar.html"
end
end
В производстве многие люди используют nginx или другие серверы из своего приложения, и эти серверы должны обрабатывать статические активы. Найти индекс можно с помощью правила местоположения, например:
location / {
try_files $uri $uri/index.html @proxy;
}
В противном случае, это решение, которое отображает запрос к корневому пути к index.html с помощью короткого функционального модуля, который можно добавить в ваш endpoint.ex
без использования контроллеров:
def redirect_index(conn = %Plug.Conn{path_info: []}, _opts) do
%Plug.Conn{conn | path_info: ["index.html"]}
end
def redirect_index(conn, _opts) do
conn
end
plug :redirect_index
# This is Phoenix standard configuration of Plug.Static with
# index.html added.
plug Plug.Static,
at: "/", from: :phoenix_elm_starter_template, gzip: false,
only: ~w(css fonts index.html images js favicon.ico robots.txt)
От ответа от Jose, я немного изменил бы его, чтобы он служил непосредственно в файле index.html
вместо отправки HTTP-ответа 3xx
.
defmodule MyApp.RootController do
use MyApp.Web, :controller
plug :action
def index(conn, _params) do
conn
|> put_resp_header("content-type", "text/html; charset=utf-8")
|> Plug.Conn.send_file(200, "priv/static/index.html")
end
end