aboutsummaryrefslogtreecommitdiffstats
path: root/site/.htaccess
diff options
context:
space:
mode:
Diffstat (limited to 'site/.htaccess')
-rw-r--r--site/.htaccess116
1 files changed, 116 insertions, 0 deletions
diff --git a/site/.htaccess b/site/.htaccess
new file mode 100644
index 0000000..0bbfea2
--- /dev/null
+++ b/site/.htaccess
@@ -0,0 +1,116 @@
+---
+---
+
+###############################################################################
+# WARNING
+###############################################################################
+# Only modify this file if you know what you're doing. This file has
+# the potential to make pages become PERMANENTLY UNREACHABLE. If in
+# doubt, refer to these links:
+#
+# RewriteRule - http://httpd.apache.org/docs/current/mod/mod_rewrite.html
+# RewriteRule flags - http://httpd.apache.org/docs/current/rewrite/flags.html
+# .htaccess tester - http://htaccess.madewithlove.be/
+#
+# And remember: three-oh-ONE (301) menas you get ONE chance to get it right;
+# three-oh-TWO (302) means you get TWO chances.
+###############################################################################
+
+# set error pages
+ErrorDocument 404 {{site.baseurl}}/404.html
+
+# turn off automatic directory indices
+Options -Indexes
+
+# turn on redirection
+Options +FollowSymLinks
+RewriteEngine on
+
+# NOTE:
+# Some of the below redirects are 302s, and some are 301s. 302s are used
+# for redirects whose targets change sometimes. For example:
+# - /docs/ -> /docs/fr/, /docs/en/, etc.
+# - /docs/en/ -> /docs/en/dev/, /docs/en/latest/, etc.
+# - /docs/en/latest -> /docs/en/4.0.0/, /docs/en/5.0.0/, etc.
+#
+# 301s are for PERMANENT redirects. These are used only for mapping old
+# pages to new pages.
+#
+# NOTE:
+# (\w\w(?:-\w\w)?) - regex for languages
+# (?:\d+\.(?:\d+\.\d+|x))|dev|latest - regex for versions
+#
+# NOTE:
+# Meanings of some of the flags at the ends of rules:
+#
+# L - terminal rule; if it applies, no more rules are checked
+# R - redirect (followed by code)
+# NE - no escaping special characters
+
+# 302 (temporary):
+#
+# docs/ -> docs/[default language]/latest/
+# docs/* -> docs/*/latest/
+# docs/*/ -> docs/*/latest/
+# docs/*/latest -> docs/*/latest/
+#
+RewriteRule ^.*docs/$ {{site.baseurl}}/docs/{{site.language}}/latest/ [R=302,L]
+RewriteRule ^.*docs/(\w\w(?:-\w\w)?)$ {{site.baseurl}}/docs/$1/latest/ [R=302,L]
+RewriteRule ^.*docs/(\w\w(?:-\w\w)?)/$ {{site.baseurl}}/docs/$1/latest/ [R=302,L]
+RewriteRule ^.*docs/(\w\w(?:-\w\w)?)/latest$ {{site.baseurl}}/docs/$1/latest/ [R=302,L]
+
+# 302 (temporary):
+#
+# docs/*/XX/* -> docs/*/YY/*
+#
+{% for redirect in site.data.redirects.version-renames %}RewriteRule ^.*docs/(\w\w(?:-\w\w)?)/{{redirect[0]}}/(.*)$ {{site.baseurl}}/docs/$1/{{redirect[1]}}/$2 [R=302,L]
+{% endfor %}
+
+# 302 (temporary):
+#
+# docs/XX/* -> docs/YY/*
+#
+{% for redirect in site.data.redirects.language-renames %}RewriteRule ^.*docs/{{redirect[0]}}/((?:\d+\.(?:\d+\.\d+|x))|dev|latest)/(.*)$ {{site.baseurl}}/docs/{{redirect[1]}}/$1/$2 [R=302,L]
+{% endfor %}
+
+# 301 (PERMANENT):
+#
+# old docs pages -> new docs pages (global)
+#
+# NOTE:
+# The first part of the path (i.e. the ".*") is thrown away and replaced
+# by site.baseurl. It is thrown away because there is no RewriteCond to
+# control whether the rewrite happens to a URI or a local file path
+# (when Apache is locating the local file to serve).
+{% for redirect in site.data.redirects.docs-global %}RewriteRule ^.*docs/(\w\w(?:-\w\w)?)/((?:\d+\.(?:\d+\.\d+|x))|dev|latest)/{{redirect[0]}}$ {{site.baseurl}}/docs/$1/$2/{{redirect[1]}} [NE,R=301,L]
+{% endfor %}
+
+# 301 (PERMANENT):
+#
+# old docs pages -> new docs pages (version-specific)
+#
+{% for redirect in site.data.redirects.docs %}RewriteRule ^.*docs/(\w\w(?:-\w\w)?)/{{redirect[0]}}$ {{site.baseurl}}/docs/$1/{{redirect[1]}} [NE,R=301,L]
+{% endfor %}
+
+# 301 (PERMANENT):
+#
+# old pages -> new pages
+#
+{% for redirect in site.data.redirects.general %}RewriteRule ^.*/{{redirect[0]}}$ {{site.baseurl}}/{{redirect[1]}} [NE,R=301,L]
+{% endfor %}
+
+# rewrite only:
+#
+# /docs/XX/latest/* -> /docs/XX/Y.Y.Y/*
+#
+# NOTE:
+# This does NOT return a redirect. It returns the resource *as if* the
+# redirected URI was requested. That is, both URIs return the same
+# resource, but the browser won't change the URI (no redirects followed).
+#
+# NOTE:
+# This needs to be *after* the docs redirects because they might need the
+# "/latest/" to be in the URI in order to activate. Placing this rule
+# before them will rewrite "/latest/" to the latest version and redirects
+# for "/latest/some/path.html" will never activate.
+RewriteRule ^.*docs/(\w\w(?:-\w\w)?)/latest/(.*)$ {{site.baseurl}}/docs/$1/{{site.latest_docs_version}}/$2 [L]