This Pelican plugin creates an nginx-compatible map between the final page locations and prior locations, defined in the `Alias` attribute for any article or page.
Project description
nginx_alias_map: A Plugin for Pelican
This Pelican plugin creates an nginx-compatible map between the final page locations and prior locations, defined in the "Alias" attribute for any article or page.
Loosely based on pelican-alias by Chris Williams, which itself was inspired by jekyll_alias_generator.
Installation
This plugin can be installed via:
python -m pip install pelican-nginx-alias-map
Usage
Add the directory to the base plugins directory to PLUGIN_PATHS
in
pelicanconf.py
, and then add nginx_alias_map
to the PLUGINS
list. For example,
PLUGIN_PATHS = ["plugins"]
PLUGINS = ['nginx_alias_map']
Definable parameters (with defaults in brackets) allow some configuration of the output of the plugin.
There are two definable parameters, one from Chris's code (ALIAS_DELIMITER
), which
defines the delimiter for multiple aliases for the same item; and ALIAS_FILE
, which
defines the final name of the output file containing the map; and
ALIAS_DELIMITER : Delimeter between multiple aliases for the same item [","]
ALIAS_FILE : Name of map file to be placed in `output` ['alias_map.txt']
ALIAS_MAP : Name of the map used in the alias file ['redirect_uri']
ALIAS_MAP_TEMP: Name of the map used in the alias file when 2-stage lookup is needed ['redirect_uri_1']
Support for URLs with query strings
In the event that you need to redirect a URI that contains a query string, a separate
map block will be created to map the $request_uri
against an re.escaped version of your
alias that contains the ?
character. Otherwise, when no query string is present, the
test is made against $uri
, which has much more processing done with it (query string
removal, removal of unnecessary '/'s, and so forth).
NGINX configuration
The resulting file (stored in output/$(ALIAS_FILE)
) is ready to be included into
your nginx configuration file (in an http stanza). Once the map is created, use the
ALIAS_MAP
variable in your processing.
include /opt/web/output/alias_map.txt;
server {
listen *:80 ssl;
server_name example.server;
# Redirection logic
if ( $redirect_uri ) {
return 301 $redirect_uri;
}
location / {
alias /opt/web/output;
}
}
This configuration uses the evil if
statement, but it's concise. If you have a better
approach, please create a pull request, and I'll add it to this doc (or replace it if it
makes more sense).
I've chosen to use a 301 redirect here, because I'm confident of the permanency. During testing, you may want to use a 302.
Contributing
Contributions are welcome and much appreciated. Every little bit helps. You can contribute by improving the documentation, adding missing features, and fixing bugs. You can also help out by reviewing and commenting on existing issues.
To start contributing to this plugin, review the Contributing to Pelican documentation, beginning with the Contributing Code section.
License
This project is licensed under the MIT license.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pelican_nginx_alias_map-2.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | e224beb4f94d51262f6d927aea7a92c446f4dbc469330297e399b24fa94af500 |
|
MD5 | 5f57b44542985ed0ccbbe0010ef54b35 |
|
BLAKE2b-256 | 67a3c7464e71994d7da4da468e7ee034cd861bc296bf054a9b306b295a29c40a |
Hashes for pelican_nginx_alias_map-2.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 40aa11d763dfc6ec5fd9843fceeb722d7942e15fa389d6ed5b924e6dd779d551 |
|
MD5 | e76703b9269f4581f32b128dd04fee41 |
|
BLAKE2b-256 | 8df85c44c8e648c843ddbedf33fd260cccfa719c33965b416dd66e860092a9f1 |