Skip to content

Commit b8a4d88

Browse files
committed
Respect that dirhtml builder does not have .html in canonical URLs
1 parent ce20cfc commit b8a4d88

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

sphinx_rtd_theme/layout.html

+12-2
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,22 @@
5151

5252
{#- CANONICAL URL (deprecated) #}
5353
{%- if theme_canonical_url and not pageurl %}
54-
<link rel="canonical" href="{{ theme_canonical_url }}{{ pagename }}.html"/>
54+
<link rel="canonical" href="{{ theme_canonical_url }}{{ pagename }}{% if builder == 'dirhtml' %}/{% else %}.html{% endif %}"/>
5555
{%- endif -%}
5656

5757
{#- CANONICAL URL #}
58+
{# NB! pageurl is currently a non-documented template context variable! #}
59+
{# pageurl implementation: https://www.sphinx-doc.org/en/master/_modules/sphinx/builders/html.html #}
5860
{%- if pageurl %}
59-
<link rel="canonical" href="{{ pageurl|e }}" />
61+
{# pageurl implementation wrongly: adds .html for the dirhtml builder's pageurl #}
62+
{# Workaround for: https://github.com/sphinx-doc/sphinx/issues/9730 #}
63+
{# Once a fix is released in Sphinx, put an upper bound on the Sphinx version for the workaround #}
64+
{% if builder == 'dirhtml' and pageurl.endswith('.html') %}
65+
{# This expression trims away .html and adds a / #}
66+
<link rel="canonical" href="{{ (pageurl|e)[:-5] }}/" />
67+
{% else %}
68+
<link rel="canonical" href="{{ pageurl|e }}" />
69+
{% endif %}
6070
{%- endif -%}
6171

6272
{#- JAVASCRIPTS #}

0 commit comments

Comments
 (0)