[contrib-guide] Adding redirect instructions
Change-Id: I2f334d87bc5f714240b4c7e52f3a15c0fa7b00cd Co-Authored-By: Stephen Finucane <sfinucan@redhat.com>
This commit is contained in:
parent
c8ea1b3ca0
commit
26db47c7e5
@ -38,6 +38,7 @@ Contents
|
||||
diagram-guidelines.rst
|
||||
docs-review.rst
|
||||
docs-builds.rst
|
||||
redirects.rst
|
||||
doc-tools.rst
|
||||
release.rst
|
||||
|
||||
|
151
doc/doc-contrib-guide/source/redirects.rst
Normal file
151
doc/doc-contrib-guide/source/redirects.rst
Normal file
@ -0,0 +1,151 @@
|
||||
.. _redirects:
|
||||
|
||||
=========================
|
||||
Redirecting documentation
|
||||
=========================
|
||||
|
||||
As of the Pike release, redirection of links became imperative as a direct
|
||||
result of the `doc-migration`_ that saw a large majority of the documentation
|
||||
living in the `openstack-manuals` repository moved out to the respective
|
||||
project repositories. This content move, however, did break a lot of external
|
||||
(and internal) links.
|
||||
|
||||
Adding a .htaccess file to your repo
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The first step is to add the ``.htaccess`` configuration file that Apache
|
||||
requires to know what the redirect rules are. `openstack-manuals` has a global
|
||||
file in the `openstack-manuals` repository but we have also configured Apache
|
||||
to allow a ``.htaccess`` file in each project's documentation.
|
||||
|
||||
If including a ``.htaccess`` file in the project, then Sphinx needs to be told
|
||||
to include the file in the build output by adding it to the list of `extra`
|
||||
files. `This patch`__ for nova shows how that is done by editing
|
||||
``doc/source/conf.py`` to set ``html_extra_path``. If the path is set to
|
||||
``_extras``, then the patch should also create ``doc/source/_extras/.htaccess``
|
||||
containing the redirects needed. The contents of that file can be written by
|
||||
hand, or :ref:`computed with a command <git-redirect-generation>`.
|
||||
|
||||
While this file is a real ``.htaccess`` file, it is expected that the file will
|
||||
only contain redirects using the ``Redirect`` and ``RedirectMatch`` rules. For
|
||||
example, the below shows a number of redirects for the nova project reflecting
|
||||
files moved between the Ocata and Pike releases:
|
||||
|
||||
.. code-block:: apache
|
||||
|
||||
redirectmatch 301 ^/nova/([^/]+)/aggregates.html$ /nova/$1/user/aggregates.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/architecture.html$ /nova/$1/user/architecture.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/block_device_mapping.html$ /nova/$1/user/block-device-mapping.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/cells.html$ /nova/$1/user/cells.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/conductor.html$ /nova/$1/user/conductor.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/feature_classification.html$ /nova/$1/user/feature-classification.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/filter_scheduler.html$ /nova/$1/user/filter-scheduler.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/placement.html$ /nova/$1/user/placement.html
|
||||
|
||||
This file will ensure redirects are in place for paths such as
|
||||
``/nova/latest/aggregates.html`` to ``/nova/latest/user/aggregates.html``, and
|
||||
``/nova/latest/cells.html`` to ``/nova/latest/user/cells.html``.
|
||||
|
||||
__ https://review.openstack.org/#/c/487932/5/doc/source/conf.py
|
||||
|
||||
Enable detailed redirects for your project
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
As of the Pike release and the doc-migration, everything that was under
|
||||
``/developer/$project/`` was moved to ``/$project/latest/`` (with similar moves
|
||||
for other versions). By default, any page under ``/developer/$project/`` is now
|
||||
being redirected to ``/$project/latest/``. This gives the user a table of
|
||||
contents to find the new page.
|
||||
|
||||
After a local ``.htaccess`` file is added to a project's documentation,
|
||||
``/developer/$project/(.*)`` can be redirected to ``/$project/latest/$1``,
|
||||
which will then redirect *again* to the new home of the file.
|
||||
|
||||
To turn that feature on for your repository, set the ``has_in_tree_htaccess``
|
||||
flag for the repo by modifying ``www/project-data/latest.yaml`` in the
|
||||
`openstack-manuals` repository. See :doc:`/doc-tools/template-generator` for
|
||||
details about the other flags you can set to control how your project appears
|
||||
on ``docs.openstack.org``.
|
||||
|
||||
After the ``has_in_tree_htaccess`` flag change lands, links to URLs like
|
||||
``docs.openstack.org/developer/nova/cells.html`` should (with two redirects)
|
||||
end up at the new home ``docs.openstack.org/nova/latest/user/cells.html``.
|
||||
|
||||
.. _git-redirect-generation:
|
||||
|
||||
Optional: Generating ``.htaccess`` files from Git
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If creating an initial ``.htaccess``, you can use some Git-fu to automatically
|
||||
generate a file containing redirects between the last release and the current
|
||||
one. For example, to generate a list of redirects for the nova project for
|
||||
files moved between Ocata (`stable/ocata`) and the current `HEAD` (presumed to
|
||||
be Pike), run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git log --follow --name-status \
|
||||
--format='%H' origin/stable/ocata.. \
|
||||
-- doc/source | \
|
||||
grep ^R | \
|
||||
grep .rst | \
|
||||
cut -f2- | \
|
||||
sed -e 's|doc/source/|^/nova/([^/]+)/|' \
|
||||
-e 's|doc/source/|/nova/$1/|' \
|
||||
-e 's/.rst/.html$/' \
|
||||
-e 's/.rst/.html/' \
|
||||
-e 's/^/redirectmatch 301 /'
|
||||
|
||||
The output will look as follows:
|
||||
|
||||
.. code-block:: apache
|
||||
|
||||
redirectmatch 301 ^/nova/([^/]+)/aggregates.html$ /nova/$1/user/aggregates.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/architecture.html$ /nova/$1/user/architecture.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/block_device_mapping.html$ /nova/$1/user/block-device-mapping.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/cells.html$ /nova/$1/user/cells.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/conductor.html$ /nova/$1/user/conductor.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/feature_classification.html$ /nova/$1/user/feature-classification.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/filter_scheduler.html$ /nova/$1/user/filter-scheduler.html
|
||||
redirectmatch 301 ^/nova/([^/]+)/placement.html$ /nova/$1/user/placement.html
|
||||
|
||||
For those curious enough, this script works like so:
|
||||
|
||||
#. The `git log` command traverses the Git history of master since the
|
||||
`stable/ocata` branch was cut, following files under `doc/source` as they are
|
||||
renamed, and shows the hash of the change and names and status of changed
|
||||
files. The output looks like:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
2f36a355f29cb9f23beb2b80399e59f02d3c17a3
|
||||
M doc/source/_extra/.htaccess
|
||||
M doc/source/index.rst
|
||||
R100 doc/source/user/cellsv2_layout.rst doc/source/user/cellsv2-layout.rst
|
||||
M doc/source/user/index.rst
|
||||
|
||||
#. The `grep` command filters for lines starting with ``R`` (indicating that
|
||||
the file was renamed) and for files ending in ``.rst`` (to limit to
|
||||
documentation files). The output looks like:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
R100 doc/source/user/cellsv2_layout.rst doc/source/user/cellsv2-layout.rst
|
||||
|
||||
#. The `cut` command takes field 2 to the end, giving the old filename and the
|
||||
new filename:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
doc/source/user/cellsv2_layout.rst doc/source/user/cellsv2-layout.rst
|
||||
|
||||
#. Finally, the `sed` command replaces the `doc/source` parts of the paths with
|
||||
the project name and a pattern that will match the series portion of the
|
||||
URL. It converts the `.rst` extension to `.html` and inserts the
|
||||
``redirectmatch`` directive at the front of the line, giving:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
redirectmatch 301 ^/nova/([^/]+)/user/cellsv2_layout.html$ /nova/$1/user/cellsv2-layout.html
|
||||
|
||||
.. _doc-migration: https://specs.openstack.org/openstack/docs-specs/specs/pike/os-manuals-migration.html
|
Loading…
Reference in New Issue
Block a user