plug_canonical_host alternatives and similar packages
Based on the "Framework Components" category.
Alternatively, view plug_canonical_host alternatives based on common mentions on social networks and blogs.
-
commanded
Command handling middleware for Command Query Responsibility Segregation (CQRS) applications. -
torch
Torch is a rapid admin generator for Phoenix apps. It uses generators rather than DSLs to ensure that the code remains maintainable. -
phoenix_html
Phoenix.HTML functions for working with HTML strings and templates. -
react_phoenix
Make rendering React.js components in Phoenix views easy -
cors_plug
An Elixir plug that adds CORS headers to requests and responds to preflight requests (OPTIONS). -
scrivener_html
Helpers built to work with Scrivener's page struct to easily build HTML output for various CSS frameworks. -
phoenix_live_reload
Provides live-reload functionality for Phoenix. -
rummage_ecto
A configurable framework to search, sort and paginate Ecto Queries. -
phoenix_token_auth
Token authentication solution for Phoenix. Useful for APIs or single page apps. -
phoenix_pubsub_redis
The Redis PubSub adapter for the Phoenix framework. -
rummage_phoenix
A support framework for searching, sorting and paginating models in Phoenix, with support HTML support. -
plug_graphql
Phoenix Plug integration for GraphQL Elixir. -
sentinel
An authentication framework for Phoenix extending guardian with routing and other basic functionality. -
plug_rails_cookie_session_store
Rails compatible Plug session store. -
access pass
Authentication framework that can be used with or outside of phoenix. Similar to Addict but geared towards API usage.(Docs). -
multiverse
Plug that allows to add version compatibility layers via API Request/Response Gateways. -
filterable
Simple query params filtering for Phoenix framework inspired by Rails has_scope. -
phoenix_pubsub_rabbitmq
RabbitMQ adapter for Phoenix's PubSub layer. -
better_params
Elixir Plug for cleaner request params in web apps. -
plug_checkup
Plug for adding simple health checks to your app. -
plug_statsd
A plug for automatically sending timing and count metrics to statsd. -
trailing_format_plug
An Elixir plug to support legacy APIs that use a rails-like trailing format. -
scrivener_headers
Helpers for paginating API responses with Scrivener and HTTP headers. -
phoenix_html_simplified_helpers
Some helpers for phoenix html (truncate, time_ago_in_words, number_with_delimiter). -
phoenix_pubsub_postgres
Postgresql PubSub adapter for Phoenix apps.
Get performance insights in less than 4 minutes
Do you think we are missing an alternative of plug_canonical_host or a related project?
Popular Comparisons
README
PlugCanonicalHost ensures that all requests are served by a single canonical host. It will redirect all requests from non-canonical hosts to the canonical one.
Installation
Add plug_canonical_host
to the deps
function in your project’s mix.exs
file:
defp deps do
[
…,
{:plug_canonical_host, "~> 2.0"}
]
end
Then run mix do deps.get, deps.compile
inside your project’s directory.
Usage
PlugCanonicalHost
can be used just as any other plugs. Add PlugCanonicalHost
before all of the other plugs you want to happen after successful redirect to your canonical host.
The recommended way to define a canonical host is with an environment variable.
# config/releases.exs
config :my_app,
canonical_host: System.get_env("CANONICAL_HOST")
# lib/my_app/endpoint.ex
defmodule MyApp.Endpoint do
plug(:canonical_host)
defp canonical_host(conn, _opts) do
:my_app
|> Application.get_env(:canonical_host)
|> case do
host when is_binary(host) ->
opts = PlugCanonicalHost.init(canonical_host: host)
PlugCanonicalHost.call(conn, opts)
_ ->
conn
end
end
end
For example, if your CANONICAL_HOST
is www.example.com
but your application is accessible via both example.com
and www.example.com
, all traffic coming through example.com
will be redirected (with a 301
HTTP status) to the matching www.example.com
URL.
$ curl -sI "http://example.com/foo?bar=1"
#> HTTP/1.1 301 Moved Permanently
#> Location: http://www.example.com/foo?bar=1
If you want to exclude certain requests from redirecting to the canonical host, you can use simple pattern matching in your function arguments:
defmodule MyApp.Endpoint do
plug(:canonical_host)
defp canonical_host(%Plug.Conn{request_path: "/ignore-me"} = conn, _opts) do
Plug.Conn.send_resp(conn, 200, "👋")
end
defp canonical_host(conn, _opts) do
:my_app
|> Application.get_env(:canonical_host)
|> case do
host when is_binary(host) ->
opts = PlugCanonicalHost.init(canonical_host: host)
PlugCanonicalHost.call(conn, opts)
_ ->
conn
end
end
end
Now, all requests going to the /ignore-me
path will skip the canonical host redirect behavior.
$ curl -sI "http://example.com/foo?bar=1"
#> HTTP/1.1 301 Moved Permanently
#> Location: http://www.example.com/foo?bar=1
$ curl -sI "http://example.com/ignore-me"
#> HTTP/1.1 200 OK
License
PlugCanonicalHost
is © 2016-2020 Rémi Prévost and may be freely distributed under the MIT license. See the LICENSE.md
file for more information.
The plug logo is based on this lovely icon by Vectors Market, from The Noun Project. Used under a Creative Commons BY 3.0 license.
*Note that all licence references and agreements mentioned in the plug_canonical_host README section above
are relevant to that project's source code only.