<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Nginx on Natenoms Blog</title><link>https://natenom.de/tags/nginx/</link><description>Recent content in Nginx on Natenoms Blog</description><generator>Hugo -- gohugo.io</generator><language>de</language><copyright/><lastBuildDate>Mon, 27 Mar 2023 13:20:12 +0200</lastBuildDate><atom:link href="https://natenom.de/tags/nginx/index.xml" rel="self" type="application/rss+xml"/><item><title>Verbesserter Shortcode für die Einbindung von 360°-Fotos in meinem Blog (1 Update)</title><link>https://natenom.de/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/</link><pubDate>Mon, 27 Mar 2023 13:20:12 +0200</pubDate><guid>https://natenom.de/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/</guid><description>&lt;p>Da die Erstellung der 360°-Fotos relativ gut funktioniert und ich davon in Zukunft mehr erstellen werde, habe ich meinen Shortcode &lt;code>sphere&lt;/code> erweitert.&lt;/p></description><content:encoded><![CDATA[<p>Da die Erstellung der 360°-Fotos relativ gut funktioniert und ich davon in Zukunft mehr erstellen werde, habe ich meinen Shortcode <code>sphere</code> erweitert.</p>
<p>Der Shortcode sorgt dafür, dass ein zusammengefügtes 360°-Foto in einem virtuellen Raum angezeigt wird, <a  href="/2023/01/es-gibt-wieder-360-grad-fotos-in-meinem-foto-blog/">Details hier</a>.</p>
<p>Ich habe den Shortcode nun erweitert und zusätzlich zum Bildbetrachter gibt weitere Informationen:</p>
<ul>
<li>Ein Link zur Markierung auf einer Karte bei OpenStreetMap, an dem das &ldquo;Foto&rdquo; <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> entstanden ist.</li>
<li>Ein Link zum Originalfoto mit der Angabe der Dateigröße. Im Gegenzug habe ich den Download-Button aus den Bedienelementen entfernt.</li>
<li>Eine Karte kann unter dem Foto nachgeladen werden, jedoch erst nach einem Klick auf &ldquo;Karte von OpenStreetMap nachladen …&rdquo;, zuvor werden Infos zum Datenschutz angezeigt, da die Karte von einer externen Website nachgeladen wird.</li>
</ul>
<div class="shortcode-notice update">
    <div class="shortcode-notice-title update">
        Update</div>
    <div class="notice-content">Update 1 (2023-09-11): Es gibt eine neue Variante des Shortcodes, der auch mit mehreren Einbindungen pro Blogbeitrag umgehen kann (bis auf die Karte), <a  href="/2023/09/mehrere-spheres-in-einem-blogbeitrag/">siehe hier</a>.</div>
</div>



<h2 id="iframe-via-webserver-erlauben" data-numberify>iframe via Webserver erlauben<a class="anchor ms-1" href="#iframe-via-webserver-erlauben"></a></h2>
<p>Damit das neue iframe geladen wird, musste ich in meiner nginx-Konfiguration im Bereich <code>add_header Content-Security-Policy</code> hinzufügen:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-nginx" data-lang="nginx"><span style="display:flex;"><span><span style="color:#66d9ef">frame-src</span> <span style="color:#e6db74">https://www.openstreetmap.org/export/embed.html</span>
</span></span></code></pre></div>
<h2 id="der-erweiterte-shortcode" data-numberify>Der erweiterte Shortcode<a class="anchor ms-1" href="#der-erweiterte-shortcode"></a></h2>

<h3 id="hugo-shortcode" data-numberify>Hugo-Shortcode<a class="anchor ms-1" href="#hugo-shortcode"></a></h3>
<p>Hier der Quelltext der erweiterten Shortcodes <code>sphere.html</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go-html-template" data-lang="go-html-template"><span style="display:flex;"><span><span style="color:#75715e">{{-</span> <span style="color:#a6e22e">$img</span> <span style="color:#f92672">:=</span> <span style="color:#f92672">(</span><span style="color:#a6e22e">.Page.Resources.ByType</span> <span style="color:#e6db74">&#34;image&#34;</span><span style="color:#f92672">)</span><span style="color:#a6e22e">.GetMatch</span> <span style="color:#f92672">(</span><span style="color:#66d9ef">printf</span> <span style="color:#e6db74">&#34;*%s&#34;</span> <span style="color:#f92672">(</span><span style="color:#a6e22e">.Get</span> <span style="color:#e6db74">&#34;src&#34;</span><span style="color:#f92672">))</span> <span style="color:#75715e">-}}</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">{{-</span> <span style="color:#a6e22e">$caption</span> <span style="color:#f92672">:=</span> <span style="color:#e6db74">&#34;&#34;</span> <span style="color:#75715e">-}}{{</span> <span style="color:#66d9ef">if</span> <span style="color:#a6e22e">isset</span> <span style="color:#a6e22e">.Params</span> <span style="color:#e6db74">&#34;caption&#34;</span> <span style="color:#75715e">}}{{</span> <span style="color:#a6e22e">$caption</span> <span style="color:#f92672">=</span> <span style="color:#f92672">(</span><span style="color:#a6e22e">.Get</span> <span style="color:#e6db74">&#34;caption&#34;</span> <span style="color:#f92672">|</span> <span style="color:#a6e22e">markdownify</span> <span style="color:#f92672">)</span> <span style="color:#75715e">}}{{</span> <span style="color:#66d9ef">end</span> <span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">{{-</span> <span style="color:#a6e22e">$osmurl</span> <span style="color:#f92672">:=</span> <span style="color:#e6db74">&#34;&#34;</span> <span style="color:#75715e">-}}{{</span> <span style="color:#66d9ef">if</span> <span style="color:#a6e22e">isset</span> <span style="color:#a6e22e">.Params</span> <span style="color:#e6db74">&#34;osmurl&#34;</span> <span style="color:#75715e">}}{{</span> <span style="color:#a6e22e">$osmurl</span> <span style="color:#f92672">=</span> <span style="color:#f92672">(</span><span style="color:#a6e22e">.Get</span> <span style="color:#e6db74">&#34;osmurl&#34;</span> <span style="color:#f92672">)</span> <span style="color:#75715e">}}{{</span> <span style="color:#66d9ef">end</span> <span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">{{-</span> <span style="color:#a6e22e">$osmembedurl</span> <span style="color:#f92672">:=</span> <span style="color:#e6db74">&#34;&#34;</span> <span style="color:#75715e">-}}{{</span> <span style="color:#66d9ef">if</span> <span style="color:#a6e22e">isset</span> <span style="color:#a6e22e">.Params</span> <span style="color:#e6db74">&#34;osmembedurl&#34;</span> <span style="color:#75715e">}}{{</span> <span style="color:#a6e22e">$osmembedurl</span> <span style="color:#f92672">=</span> <span style="color:#f92672">(</span><span style="color:#a6e22e">.Get</span> <span style="color:#e6db74">&#34;osmembedurl&#34;</span> <span style="color:#f92672">)</span> <span style="color:#75715e">}}{{</span> <span style="color:#66d9ef">end</span> <span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">{{-</span> <span style="color:#a6e22e">$imgsize</span> <span style="color:#f92672">:=</span> <span style="color:#e6db74">&#34;&#34;</span> <span style="color:#75715e">-}}{{</span> <span style="color:#66d9ef">if</span> <span style="color:#a6e22e">isset</span> <span style="color:#a6e22e">.Params</span> <span style="color:#e6db74">&#34;imgsize&#34;</span> <span style="color:#75715e">}}{{</span> <span style="color:#a6e22e">$imgsize</span> <span style="color:#f92672">=</span> <span style="color:#f92672">(</span><span style="color:#a6e22e">.Get</span> <span style="color:#e6db74">&#34;imgsize&#34;</span> <span style="color:#f92672">)</span> <span style="color:#75715e">}}{{</span> <span style="color:#66d9ef">end</span> <span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">head</span>&gt;
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">&lt;!-- for optimal display on high DPI devices --&gt;</span>
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;viewport&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;width=device-width, initial-scale=1.0&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">link</span> <span style="color:#a6e22e">rel</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;stylesheet&#34;</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/my_css/sphere/index.min.css&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">head</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/my_js/sphere/three.min.js&#34;</span>&gt;&lt;/<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/my_js/sphere/index.min.js&#34;</span>&gt;&lt;/<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!-- the viewer container must have a defined size --&gt;</span>
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;viewer&#34;</span> <span style="color:#a6e22e">style</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;width: 100%; height: 60vh;&#34;</span>&gt;&lt;/<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">viewer</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">PhotoSphereViewer</span>.<span style="color:#a6e22e">Viewer</span>({
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">container</span><span style="color:#f92672">:</span> document.<span style="color:#a6e22e">querySelector</span>(<span style="color:#e6db74">&#39;#viewer&#39;</span>),
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">panorama</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;</span><span style="color:#75715e">{{-</span> <span style="color:#a6e22e">$img</span> <span style="color:#75715e">-}}</span><span style="color:#e6db74">&#39;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">caption</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;</span><span style="color:#75715e">{{-</span> <span style="color:#a6e22e">$caption</span> <span style="color:#75715e">-}}</span><span style="color:#e6db74">&#39;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">fisheye</span><span style="color:#f92672">:</span> <span style="color:#66d9ef">true</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">lang</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">zoom</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Zoomen&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">zoomOut</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Heraus zommen&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">zoomIn</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Hinein zoomen&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">moveUp</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Nach oben&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">moveDown</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Nach unten&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">moveLeft</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Nach links&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">moveRight</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Nach rechts&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">download</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Herunterladen&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">fullscreen</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Vollbild&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">menu</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Menü&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">close</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Schließen&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">twoFingers</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Benutze 2 Finger zum Navigieren.&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">ctrlZoom</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Benutze Strg und das Mausrad, um im Bild zu zoomen.&#39;</span>,
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">loadError</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Das Panorama kann nicht geladen werden.&#39;</span>,
</span></span><span style="display:flex;"><span>          }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">viewer</span>.<span style="color:#a6e22e">navbar</span>.<span style="color:#a6e22e">getButton</span>(<span style="color:#e6db74">&#39;download&#39;</span>).<span style="color:#a6e22e">hide</span>();
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;shortcode-sphere&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">p</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;untertitel&#34;</span>&gt;<span style="color:#75715e">{{-</span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span> <span style="color:#a6e22e">$osmurl</span> <span style="color:#f92672">)</span> <span style="color:#75715e">-}}</span>&lt;<span style="color:#f92672">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#75715e">{{</span> <span style="color:#a6e22e">$osmurl</span> <span style="color:#75715e">}}</span><span style="color:#e6db74">&#34;</span>&gt;Standort&lt;/<span style="color:#f92672">a</span>&gt; (bei OpenStreetMap), <span style="color:#75715e">{{</span> <span style="color:#66d9ef">end</span> <span style="color:#75715e">-}}</span>&lt;<span style="color:#f92672">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#75715e">{{-</span> <span style="color:#a6e22e">$img</span> <span style="color:#75715e">-}}</span><span style="color:#e6db74">&#34;</span>&gt;Originalfoto&lt;/<span style="color:#f92672">a</span>&gt;<span style="color:#75715e">{{-</span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span> <span style="color:#a6e22e">$imgsize</span> <span style="color:#f92672">)</span> <span style="color:#75715e">}}</span> (<span style="color:#75715e">{{</span> <span style="color:#a6e22e">$imgsize</span> <span style="color:#75715e">}}</span> MiB)<span style="color:#75715e">{{-</span> <span style="color:#66d9ef">end</span> <span style="color:#75715e">-}}</span>&lt;/<span style="color:#f92672">p</span>&gt;
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!-- Optional einfügen, dass das Bild erst mit nem Click geladen wird, weil groß. --&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!-- Optional einfügen hier im Shortcode, dass unter dem Bild auch eine Karte dargestellt wird, die auch Klick hin geladen wird mit Infos zum Datenschutz --&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!-- Von https://photo-sphere-viewer.js.org/guide/#your-first-viewer --&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!-- Konfiguration: https://photo-sphere-viewer.js.org/guide/config.html#standard-options --&gt;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">{{-</span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span> <span style="color:#a6e22e">$osmembedurl</span> <span style="color:#f92672">)</span> <span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;osmiframe&#34;</span> <span style="color:#a6e22e">data-osmembedurl</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#75715e">{{</span> <span style="color:#a6e22e">$osmembedurl</span> <span style="color:#75715e">}}</span><span style="color:#e6db74">&#34;</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;iframe-content&#34;</span>&gt;
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">p</span>&gt;Es gibt die Möglichkeit, eine Karte von OpenStreetMap mit dem Standort, an dem das Foto entstanden ist, hier anzuzeigen. Dabei werden Daten an OpenStreetMap.org übertragen. Informationen zum Datenschutz des Anbieters siehe &lt;<span style="color:#f92672">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://wiki.osmfoundation.org/wiki/Privacy_Policy&#34;</span>&gt;https://wiki.osmfoundation.org/wiki/Privacy_Policy&lt;/<span style="color:#f92672">a</span>&gt;.&lt;/<span style="color:#f92672">p</span>&gt;
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">button</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;load-iframe&#34;</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;btn btn-sm btn-primary&#34;</span>&gt;Karte von OpenStreetMap.org nachladen …&lt;/<span style="color:#f92672">button</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;/<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;<span style="color:#f92672">noscript</span>&gt;&lt;<span style="color:#f92672">p</span>&gt;Du benötigst JavaScript, um das iframe mit der Karte nachzuladen.&lt;/<span style="color:#f92672">p</span>&gt;&lt;/<span style="color:#f92672">noscript</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/my_js/sphere/iframe.js&#34;</span>&gt;&lt;/<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span><span style="color:#75715e">{{-</span> <span style="color:#66d9ef">end</span> <span style="color:#75715e">-}}</span>
</span></span></code></pre></div>
<h3 id="javascript" data-numberify>JavaScript<a class="anchor ms-1" href="#javascript"></a></h3>
<p>Das JavaScript habe ich per Copy&amp;Paste von einem <a  href="/2022/11/kommentare-in-meinem-statischen-blog-via-mastodon/">anderen Script</a> umgemodelt und nach vielen Versuchen hat es dann funktioniert. Ich habe ja von solchen Dingen keine Ahnung.</p>
<p>Hier das <code>iframe.js</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-js" data-lang="js"><span style="display:flex;"><span>document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">&#39;load-iframe&#39;</span>).<span style="color:#a6e22e">addEventListener</span>(<span style="color:#e6db74">&#39;click&#39;</span>, <span style="color:#a6e22e">init</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">init</span>() {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">iframeWrapper</span> <span style="color:#f92672">=</span> document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">&#39;osmiframe&#39;</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">osmembedurl</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">iframeWrapper</span>.<span style="color:#a6e22e">dataset</span>.<span style="color:#a6e22e">osmembedurl</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">loadComment</span>(<span style="color:#a6e22e">osmembedurl</span>);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">loadComment</span>(<span style="color:#a6e22e">osmembedurl</span>) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">iframe</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;&lt;iframe width=&#39;100%&#39; height=&#39;400&#39; frameborder=&#39;0&#39; scrolling=&#39;no&#39; marginheight=&#39;0&#39; marginwidth=&#39;0&#39; src=&#39;&#34;</span> <span style="color:#f92672">+</span> <span style="color:#a6e22e">osmembedurl</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;&#39; style=&#39;border: 1px solid black&#39;&gt;&lt;/iframe&gt;&#34;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    document.<span style="color:#a6e22e">getElementById</span>(<span style="color:#e6db74">&#39;iframe-content&#39;</span>).<span style="color:#a6e22e">innerHTML</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">iframe</span>;
</span></span><span style="display:flex;"><span>};
</span></span></code></pre></div>
<h3 id="scss" data-numberify>SCSS<a class="anchor ms-1" href="#scss"></a></h3>
<p>Und das zugehörige SCSS:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scss" data-lang="scss"><span style="display:flex;"><span><span style="color:#a6e22e">.shortcode-sphere</span> {
</span></span><span style="display:flex;"><span>	#iframe-content {
</span></span><span style="display:flex;"><span>		<span style="color:#a6e22e">border-style</span><span style="color:#f92672">:</span> dotted;
</span></span><span style="display:flex;"><span>		<span style="color:#a6e22e">margin</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">0</span><span style="color:#ae81ff">.5</span><span style="color:#66d9ef">em</span>;
</span></span><span style="display:flex;"><span>		<span style="color:#a6e22e">padding</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">0</span><span style="color:#ae81ff">.5</span><span style="color:#66d9ef">em</span>;
</span></span><span style="display:flex;"><span>	}
</span></span><span style="display:flex;"><span>	
</span></span><span style="display:flex;"><span>	<span style="color:#a6e22e">.untertitel</span> {
</span></span><span style="display:flex;"><span>	    <span style="color:#a6e22e">margin-top</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">0</span><span style="color:#ae81ff">.5</span><span style="color:#66d9ef">em</span>;
</span></span><span style="display:flex;"><span>    	<span style="color:#a6e22e">margin-bottom</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">1</span><span style="color:#66d9ef">em</span>;
</span></span><span style="display:flex;"><span>    	<span style="color:#a6e22e">margin-right</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">0</span><span style="color:#ae81ff">.5</span><span style="color:#66d9ef">em</span>;
</span></span><span style="display:flex;"><span>    	<span style="color:#a6e22e">text-align</span><span style="color:#f92672">:</span> right;
</span></span><span style="display:flex;"><span>    	<span style="color:#a6e22e">font-style</span><span style="color:#f92672">:</span> italic;
</span></span><span style="display:flex;"><span>    	<span style="color:#a6e22e">font-size</span><span style="color:#f92672">:</span> smaller;
</span></span><span style="display:flex;"><span>	}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">.btn</span> <span style="color:#f92672">a</span> {
</span></span><span style="display:flex;"><span>		<span style="color:#a6e22e">color</span><span style="color:#f92672">:</span> white;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>
<h2 id="beispiel" data-numberify>Beispiel<a class="anchor ms-1" href="#beispiel"></a></h2>
<p>Im Blogbeitrag <a  href="/2023/02/360-foto-bei-neuhausen/">360°-Foto: Neuhausen (Enzkreis)</a> wird z. B. dieser Shortcode verwendet:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go-html-template" data-lang="go-html-template"><span style="display:flex;"><span><span style="color:#75715e">{{</span><span style="color:#960050;background-color:#1e0010">&lt;</span> <span style="color:#a6e22e">sphere</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;2023-02-24-neuhausen-1-small.webp&#34;</span> <span style="color:#a6e22e">caption</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Landschaft nördlich von Neuhausen (Enzkreis)&#34;</span> <span style="color:#a6e22e">osmurl</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://www.openstreetmap.org/?mlat=48.80035&amp;mlon=8.77323#map=15/48.8010/8.7731&#34;</span> <span style="color:#a6e22e">imgsize</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;8,6&#34;</span> <span style="color:#a6e22e">osmembedurl</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://www.openstreetmap.org/export/embed.html?bbox=8.755288124084474%2C48.79391687059584%2C8.79112243652344%2C48.8067645369292&amp;amp;layer=mapnik&amp;amp;marker=48.800341115118435%2C8.773205280303955&#34;</span> <span style="color:#960050;background-color:#1e0010">&gt;</span><span style="color:#75715e">}}</span></span></span></code></pre></div>
<p>Das Ergebnis sieht so aus (ohne geladene Karte):</p>
 <figure class="image-caption"><a href="2023-03-27-screenshot-shortcode-ohne-karte.webp"><picture>
                <source type="image/webp" srcset="/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/2023-03-27-screenshot-shortcode-ohne-karte_hu0b89bfcb308401808b3fc93554c7f07c_189590_360x0_resize_q95_h2_catmullrom_2.webp 360w,/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/2023-03-27-screenshot-shortcode-ohne-karte_hu0b89bfcb308401808b3fc93554c7f07c_189590_500x0_resize_q95_h2_catmullrom_2.webp 500w,/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/2023-03-27-screenshot-shortcode-ohne-karte_hu0b89bfcb308401808b3fc93554c7f07c_189590_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/2023-03-27-screenshot-shortcode-ohne-karte_hu0b89bfcb308401808b3fc93554c7f07c_189590_360x0_resize_q95_h2_catmullrom_2.webp 360w, /2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/2023-03-27-screenshot-shortcode-ohne-karte_hu0b89bfcb308401808b3fc93554c7f07c_189590_500x0_resize_q95_h2_catmullrom_2.webp 500w, /2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/2023-03-27-screenshot-shortcode-ohne-karte_hu0b89bfcb308401808b3fc93554c7f07c_189590_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/2023-03-27-screenshot-shortcode-ohne-karte_hu0b89bfcb308401808b3fc93554c7f07c_189590_816x0_resize_q95_h2_catmullrom_2.webp" title="" loading="lazy" width="816" height="595" /></picture></a></figure>
<p>Mit geladener Karte:</p>
 <figure class="image-caption"><a href="2023-03-27-screenshot-shortcode-mit-geladener-karte-cover.webp"><picture>
                <source type="image/webp" srcset="/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/_hu97bdcebec2696c867f03dee16b7e4b1f_179822_633f017039a81c676a17c0793ce5dfb1.webp 360w,/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/_hu97bdcebec2696c867f03dee16b7e4b1f_179822_e2604ba85641f6c1775d59badaa948c9.webp 500w,/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/_hu97bdcebec2696c867f03dee16b7e4b1f_179822_7c41d422e853b2a15f4c0d7b774a2782.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/_hu97bdcebec2696c867f03dee16b7e4b1f_179822_633f017039a81c676a17c0793ce5dfb1.webp 360w, /2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/_hu97bdcebec2696c867f03dee16b7e4b1f_179822_e2604ba85641f6c1775d59badaa948c9.webp 500w, /2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/_hu97bdcebec2696c867f03dee16b7e4b1f_179822_7c41d422e853b2a15f4c0d7b774a2782.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/_hu97bdcebec2696c867f03dee16b7e4b1f_179822_7c41d422e853b2a15f4c0d7b774a2782.webp" title="" loading="lazy" width="816" height="645" /></picture></a></figure>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Es sind ja eigentlich sehr viele Einzelfotos, gemeint ist hier aber das Ergebnis.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content:encoded><enclosure url="https://natenom.de/2023/03/verbesserter-shortcode-fuer-die-einbindung-von-360-grad-fotos-in-meinem-blog/2023-03-27-screenshot-shortcode-mit-geladener-karte-cover.webp" length="179822" type="image/webp"/></item><item><title>Weiterleitungen von meiner alten Domain natenom.name entfernt</title><link>https://natenom.de/2023/01/weiterleitungen-von-meiner-alten-domain-entfernt/</link><pubDate>Wed, 25 Jan 2023 02:53:32 +0100</pubDate><guid>https://natenom.de/2023/01/weiterleitungen-von-meiner-alten-domain-entfernt/</guid><description><![CDATA[<p>Es ist nun schon mindestens 10 Jahre her (eher deutlich länger), dass ich meine Websites von der Domain <code>natenom.name</code> auf andere Domains umgezogen hatte. Bis heute gab es trotzdem noch Weiterleitungen, sodass man im mittlerweile alten (und archivierten) Wiki und im Blog heraus kam, wenn man einen Link auf die alte Domain auf irgend einer Website angeklickt hat.</p>
<p>Nun ist es aber irgendwann auch mal gut. Wer die Links bisher nicht angepasst hat, wird es vermutlich auch in Zukunft nicht mehr machen.</p>]]></description><content:encoded><![CDATA[<p>Es ist nun schon mindestens 10 Jahre her (eher deutlich länger), dass ich meine Websites von der Domain <code>natenom.name</code> auf andere Domains umgezogen hatte. Bis heute gab es trotzdem noch Weiterleitungen, sodass man im mittlerweile alten (und archivierten) Wiki und im Blog heraus kam, wenn man einen Link auf die alte Domain auf irgend einer Website angeklickt hat.</p>
<p>Nun ist es aber irgendwann auch mal gut. Wer die Links bisher nicht angepasst hat, wird es vermutlich auch in Zukunft nicht mehr machen.</p>
<p>Falls doch, sollte er/sie/es URLs zu <code>http(s)://natenom.name/</code> oder <code>http(s)://wiki.natenom.name/</code> nach <code>https://natenom.de/</code> respektive <code>https://wiki.natenom.de</code> ändern.</p>
<p>Heute habe ich die beiden Weiterleitungen entfernt und auf der Domain und der Subdomain nur noch einen entsprechenden Hinweis hinterlegt. Die Weiterleitungen waren schon viele Jahre auf den HTTP-Status-Code 301 (permanent) eingestellt gewesen.</p>
 <figure class="image-caption"><a href="2023-01-25-abschaltung-domain-cover.webp"><picture><source type="webp" srcset="/2023/01/weiterleitungen-von-meiner-alten-domain-entfernt/2023-01-25-abschaltung-domain-cover.webp" />
			         <img alt="Screenshot vom Infotext bei Aufruf der alten Domain &#39;Da diese Domain seit mittlerweile über 10 Jahren nicht mehr verwendet wird, habe ich die Weiterleitung nach wiki.natenom.de deaktiviert und werde auch die alte Domain demnächst abschalten.&#39;" src="/2023/01/weiterleitungen-von-meiner-alten-domain-entfernt/2023-01-25-abschaltung-domain-cover.webp" title="" width="583" height="125" loading="lazy" /></picture></a><figcaption>Hinweistext beim Aufruf der alten Domain.</figcaption></figure>
<p>Ab dem 11. April 2022 wird dann auch diese Info entfallen und die Domain nicht mehr vom Webserver bedient werden und danach werde ich dann auch die Domain aus dem DNS entfernen und noch später dann auch mal kündigen.</p>
<p>Auch die Weiterleitungen von <code>natenom.de</code> und <code>www.natenom.de</code> nach <code>natenom.com</code> und von <code>www.natenom.com</code> und <code>natenom.com</code> nach <code>natenom.de</code> habe ich entfernt, da es dort sowieso nie relevante Inhalte gab.</p>
<p>Insgesamt wird somit das Setup deutlich einfacher, sollte ich mal mit den <a  href="https://wiki.natenom.de/docs/sammelsurium/dynamisch/natenoms_dienste/">Websites woandershin umziehen</a> müssen.</p>]]></content:encoded><enclosure url="https://natenom.de/2023/01/weiterleitungen-von-meiner-alten-domain-entfernt/2023-01-25-abschaltung-domain-cover.webp" length="22762" type="image/webp"/></item><item><title>Weiterleitungen für den neuen Foto-Blog</title><link>https://natenom.de/2023/01/weiterleitungen-fuer-neuen-foto-blog/</link><pubDate>Thu, 12 Jan 2023 20:59:37 +0100</pubDate><guid>https://natenom.de/2023/01/weiterleitungen-fuer-neuen-foto-blog/</guid><description><![CDATA[<p>Habe heute für die über 300 Blogbeiträge, die ich nach <del>fotos.natenom.com</del> verschoben hatte, Weiterleitungen eingerichtet.</p>
<p>Als Basis dafür habe ich die Sitemap des Foto-Blogs verwendet.</p>
<p>Zu meinem Erstaunen habe ich dieses Mal nicht irgend ein Gefrickel aus <code>cat</code>, <code>sed</code>, <code>grep</code> und co verwendet, sondern nur kate, den KDE Advanced Editor.</p>]]></description><content:encoded><![CDATA[<p>Habe heute für die über 300 Blogbeiträge, die ich nach <del>fotos.natenom.com</del> verschoben hatte, Weiterleitungen eingerichtet.</p>
<p>Als Basis dafür habe ich die Sitemap des Foto-Blogs verwendet.</p>
<p>Zu meinem Erstaunen habe ich dieses Mal nicht irgend ein Gefrickel aus <code>cat</code>, <code>sed</code>, <code>grep</code> und co verwendet, sondern nur kate, den KDE Advanced Editor.</p>
<p>Zuerst rief ich die sitemap.xml in Firefox auf, weil der Browser die Datei so anzeigt, dass nicht alles in einer Zeile ist.</p>
<p>Das habe ich dann in ein neues Dokument in kate eingefügt. Dann ging es weiter mit:</p>
<ul>
<li>Manuell alle Zeilen gelöscht, die nicht für einen Blogbeitrag standen, z. B. <code>.../categories/...</code></li>
<li>Alle Vorkommen von <code>&lt;loc&gt;</code> und <code>&lt;/loc&gt;</code> entfernt und das sah dann so aus:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>…
</span></span><span style="display:flex;"><span>https://fotos.natenom.com/2022/05/der-tag-23-05-2022/
</span></span><span style="display:flex;"><span>https://fotos.natenom.com/2022/05/flugtier-beim-abbremsen/
</span></span><span style="display:flex;"><span>https://fotos.natenom.com/2022/05/fotos-der-letzten-tage-2/
</span></span><span style="display:flex;"><span>https://fotos.natenom.com/2022/05/fotos-der-tour-am-14-05-2022-fotorahmen-und-selfie/
</span></span><span style="display:flex;"><span>https://fotos.natenom.com/2022/05/fotos-der-letzten-tage/
</span></span><span style="display:flex;"><span>…
</span></span></code></pre></div><ul>
<li>Mit &ldquo;Suchen und Ersetzen&rdquo; im Modus &ldquo;Regular Expression&rdquo; nach <code>^</code> gesucht (Anfang der Zeile) und durch ein Leerzeichen ersetzt, sodass am Anfang jeder Zeile ein Leerzeichen steht.</li>
<li>Mit &ldquo;Block selection mode&rdquo; alles ab dem Ende der Domain bis zum Ende jeder Zeile markiert, z. B. <code>/2022/05/fotos-der-tour-am-14-05-2022-fotorahmen-und-selfie/</code>.</li>
</ul>
<p></p><figure class="image-caption"><picture><source type="webp" srcset="/2023/01/weiterleitungen-fuer-neuen-foto-blog/2023-01-12-kate-block-selection-mode.webp" />
			         <img alt="Screenshot vom Block selection mode in Kate." src="/2023/01/weiterleitungen-fuer-neuen-foto-blog/2023-01-12-kate-block-selection-mode.webp" title="" width="753" height="96" loading="lazy" /></picture><figcaption></figcaption></figure><p>
</p>
<ul>
<li>Weiter im &ldquo;Block selection mode&rdquo; in die erste Zeile in die erste Spalte geklickt und die Auswahl eingefügt. Es wird automatisch jede Zeile passend eingefügt.</li>
<li>Den &ldquo;Block selection mode&rdquo; wieder deaktiviert.</li>
<li>Mit &ldquo;Suchen und Ersetzen&rdquo; im Modus &ldquo;Regular Expression&rdquo; nach <code>/$</code> gesucht und durch <code>/ redirect;</code> ersetzt.</li>
<li>Um an den Anfang der Zeile noch das notwendige <code>rewrite</code> einzufügen, mit &ldquo;Suchen und Ersetzen&rdquo; nach <code>^/</code> im Modus &ldquo;Regular Expression&rdquo; suchen und mit <code>rewrite /</code> ersetzen.</li>
</ul>
<p>Im Ergebnis sieht die Textdatei nun so aus:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-nginx" data-lang="nginx"><span style="display:flex;"><span><span style="color:#66d9ef">…</span>
</span></span><span style="display:flex;"><span><span style="color:#e6db74">rewrite</span> <span style="color:#e6db74">/2022/05/der-tag-23-05-2022/</span> <span style="color:#e6db74">https://fotos.natenom.com/2022/05/der-tag-23-05-2022/</span> <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">rewrite</span> <span style="color:#e6db74">/2022/05/flugtier-beim-abbremsen/</span> <span style="color:#e6db74">https://fotos.natenom.com/2022/05/flugtier-beim-abbremsen/</span> <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">rewrite</span> <span style="color:#e6db74">/2022/05/fotos-der-letzten-tage-2/</span> <span style="color:#e6db74">https://fotos.natenom.com/2022/05/fotos-der-letzten-tage-2/</span> <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">rewrite</span> <span style="color:#e6db74">/2022/05/fotos-der-tour-am-14-05-2022-fotorahmen-und-selfie/</span> <span style="color:#e6db74">https://fotos.natenom.com/2022/05/fotos-der-tour-am-14-05-2022-fotorahmen-und-selfie/</span> <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">rewrite</span> <span style="color:#e6db74">/2022/05/fotos-der-letzten-tage/</span> <span style="color:#e6db74">https://fotos.natenom.com/2022/05/fotos-der-letzten-tage/</span> <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">…</span>
</span></span></code></pre></div><div class="shortcode-notice hinweis">
    <div class="shortcode-notice-title hinweis">
        Hinweis</div>
    <div class="notice-content">Ich habe erst einmal <code>redirect</code> verwendet, was dem HTTP Status Code 302 entspricht, da ich noch nicht sicher bin, ob alle verschobenen Beiträge auch dort bleiben. Sobald das fest steht, werde ich das durch <code>permanent</code> ersetzen, das dem Status Code 301 entspricht.</div>
</div>


<p>Insgesamt habe ich auf diese Weise 369 Weiterleitungen eingerichtet.</p>
<p>Diese 369 Zeilen habe ich in eine eigene Datei eingefügt und mittels <code>include</code> an die passende Stelle in der Nginx-Konfiguration des Blogs eingefügt.</p>
<p>Dann einmal kurz getestet, ob die Syntax passt mit:</p>
<p><code>nginx -t</code></p>
<p>Und den Webserver neugestartet, da alles okay war.</p>
<p>Fertig. 😊</p>]]></content:encoded></item><item><title>Altes, archiviertes wiki.natenom.de verbessert</title><link>https://natenom.de/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/</link><pubDate>Thu, 27 Oct 2022 18:00:45 +0200</pubDate><guid>https://natenom.de/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/</guid><description><![CDATA[<p>Ich habe Anfang des Jahres mein <a  href="https://wikiarchiv.natenom.de/">altes Wiki (wikiarchiv.natenom.de)</a>, das mit DokuWiki betrieben wurde, in eine statische Website umgewandelt und somit archiviert. Die meisten Bereiche habe ich in mein <a  href="https://wiki.natenom.de/">neues Wiki (wiki.natenom.de)</a> migriert.</p>
<p>Jedoch waren der Einfachheit halber bis heute auch die migrierten Bereiche weiterhin im alten Wiki auf Dateiebene hinterlegt, aber wegen der Weiterleitungen nicht abrufbar.</p>
<p>Die Weiterleitungen führten für migrierte Inhalte via HTTP Status Code 301 zum neuen Wiki.</p>
<p>Heute war es endlich an der Zeit, die alten Inhalte aus dem archivierten, alten Wiki restlos zu löschen.</p>
<p>Damit ich auch in Zukunft noch nachlesen kann, wie ich das gemacht hatte oder falls jemand das selbst für ein eigenes Wiki machen möchte, habe ich hier die Anleitung dazu bereit gestellt.</p>]]></description><content:encoded><![CDATA[<p>Ich habe Anfang des Jahres mein <a  href="https://wikiarchiv.natenom.de/">altes Wiki (wikiarchiv.natenom.de)</a>, das mit DokuWiki betrieben wurde, in eine statische Website umgewandelt und somit archiviert. Die meisten Bereiche habe ich in mein <a  href="https://wiki.natenom.de/">neues Wiki (wiki.natenom.de)</a> migriert.</p>
<p>Jedoch waren der Einfachheit halber bis heute auch die migrierten Bereiche weiterhin im alten Wiki auf Dateiebene hinterlegt, aber wegen der Weiterleitungen nicht abrufbar.</p>
<p>Die Weiterleitungen führten für migrierte Inhalte via HTTP Status Code 301 zum neuen Wiki.</p>
<p>Heute war es endlich an der Zeit, die alten Inhalte aus dem archivierten, alten Wiki restlos zu löschen.</p>
<p>Damit ich auch in Zukunft noch nachlesen kann, wie ich das gemacht hatte oder falls jemand das selbst für ein eigenes Wiki machen möchte, habe ich hier die Anleitung dazu bereit gestellt.</p>
<h2 id="überlegungen-zum-entfernen-der-migrierten-bereiche-aus-dem-archivierten-wiki" data-numberify>Überlegungen zum Entfernen der migrierten Bereiche aus dem archivierten Wiki<a class="anchor ms-1" href="#überlegungen-zum-entfernen-der-migrierten-bereiche-aus-dem-archivierten-wiki"></a></h2>
<p>Ein paar Gedanken dazu, ob es sinnvoll ist, die migrierten Bereiche zu entfernen:</p>
<ul>
<li>Im <a  href="https://wikiarchiv.natenom.de/ueber/seitenindex">Seitenindex</a> im Wiki und in der Sitemap fehlen die migrierten URLs. Diese wurden aber sowieso schon seit Monaten mit 301 weitergeleitet aufs neue Wiki und bleiben weiterhin via nginx-Konfiguration im Webserver, sodass auch alte Verlinkungen auf migrierte Inhalte weiterhin richtig zum neuen Wiki auflösen.</li>
<li>Man kann jetzt nur nicht mehr im alten Wiki stöbern sondern muss dazu ins neue Wiki.</li>
<li>Für Suchmaschinen ist es vermutlich besser, weil die meisten migrierten Inhalte nicht mehr nur aus Weiterleitungen bestehen. Zudem gucken Suchmaschinen dank 301 sowieso seit Langem nur noch im neuen Wiki.</li>
</ul>
<p>Wenn jemand hierzu Gedanken hat, bitte anschreiben. 😊</p>

<h2 id="was-wird-in-dieser-anleitung-gemacht" data-numberify>Was wird in dieser Anleitung gemacht?<a class="anchor ms-1" href="#was-wird-in-dieser-anleitung-gemacht"></a></h2>
<p>Auf dem lokalen Rechner wird:</p>
<ul>
<li>der Webserver Nginx installiert.</li>
<li>eine temporäre lokale Domain eingerichtet und verwendet.</li>
<li>das Wiki konfiguriert.</li>
<li>das Wiki via wget heruntergeladen und das Ergebnis modifiziert.</li>
</ul>
<p>Schließlich wird das Ergebnis auf den öffentlichen Webserver (wiki.natenom.de) hochgeladen und bleibt dort auf ewig liegen und wird nie wieder angetastet.</p>

<h2 id="vorbereitungen" data-numberify>Vorbereitungen<a class="anchor ms-1" href="#vorbereitungen"></a></h2>
<p>Als Basis habe ich meine damalige Dokumentation verwendet, die beschreibt, wie man ein DokuWiki in eine statische Website umwandelt, siehe <a  href="https://natenom.de/2022/03/dokuwiki-in-statische-website-umwandeln/">hier</a>.</p>

<h3 id="installation-der-benötigen-debian-pakete" data-numberify>Installation der benötigen Debian-Pakete<a class="anchor ms-1" href="#installation-der-benötigen-debian-pakete"></a></h3>
<pre><code>apt install nginx php8.1 php-fpm php8.1-xml
</code></pre>

<h3 id="lokale-domain-fürs-wiki" data-numberify>Lokale Domain fürs Wiki<a class="anchor ms-1" href="#lokale-domain-fürs-wiki"></a></h3>
<p>Man kann zwar auch die richtige Domain verwenden und diese auf den lokal Rechner verweisen lassen aber das birgt Probleme, falls man z. B. <a  class='urlextern'  href="https://de.wikipedia.org/wiki/HTTP_Strict_Transport_Security">HSTS</a> verwendet. Dann wird man jedes Mal auf https weitergeleitet, was hier in dieser Anleitung aber nicht eingerichtet wird.</p>
<p>Die lokale Domain habe ich einfach mal auf wiki.natenom.me festgelegt und verwende sie hier in allen Shell-Kommandos entsprechend.</p>
<p>In die Datei <code>/etc/hosts</code> trägt man dazu ein:</p>
<pre><code>127.0.0.1 wiki.natenom.me
</code></pre>

<h3 id="lokalen-webserver-konfigurieren" data-numberify>Lokalen Webserver konfigurieren<a class="anchor ms-1" href="#lokalen-webserver-konfigurieren"></a></h3>
<p>Hier die Konfiguration für den lokalen Nginx-Server:</p>
<div class="shortcode-details">
    <details>
    <summary>Datei /etc/nginx/sites-enabled/default</summary>
        <div class="shortcode-details content"><div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">45
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">46
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">47
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">48
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">49
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">50
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">51
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">52
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">53
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">54
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">55
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">56
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">57
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-nginx" data-lang="nginx"><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">listen</span> <span style="color:#ae81ff">80</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">server_name</span> <span style="color:#e6db74">wiki.natenom.me</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">autoindex</span> <span style="color:#66d9ef">off</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">index</span> <span style="color:#e6db74">index.html</span> <span style="color:#e6db74">index.htm</span> <span style="color:#e6db74">index.php</span> <span style="color:#e6db74">doku.php</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">root</span> <span style="color:#e6db74">/home/wiki.natenom.de/htdocs/</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/_media/favicon.ico</span>$ <span style="color:#e6db74">/_cdn/images/natenom_favicon_16x16.ico</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/_media/wiki/apple-touch-icon.png</span>$ <span style="color:#e6db74">/_cdn/images/natenom_favicon_512x512.png</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/favicon.png</span>$ <span style="color:#e6db74">/_cdn/images/natenom_favicon_16x16.png</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">location</span> <span style="color:#e6db74">/</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">try_files</span> $uri $uri/ <span style="color:#e6db74">@dokuwiki</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">location</span> ~ <span style="color:#e6db74">^/lib.*\.(gif|png|ico|jpg)$</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">expires</span> <span style="color:#e6db74">96h</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">location</span> = <span style="color:#e6db74">/robots.txt</span>  { <span style="color:#f92672">access_log</span> <span style="color:#66d9ef">off</span>; <span style="color:#f92672">log_not_found</span> <span style="color:#66d9ef">off</span>; }
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">location</span> ~ <span style="color:#e6db74">/\.</span>          { <span style="color:#f92672">access_log</span> <span style="color:#66d9ef">off</span>; <span style="color:#f92672">log_not_found</span> <span style="color:#66d9ef">off</span>; <span style="color:#f92672">deny</span> <span style="color:#e6db74">all</span>; }
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">location</span> ~ <span style="color:#e6db74">~$</span>           { <span style="color:#f92672">access_log</span> <span style="color:#66d9ef">off</span>; <span style="color:#f92672">log_not_found</span> <span style="color:#66d9ef">off</span>; <span style="color:#f92672">deny</span> <span style="color:#e6db74">all</span>; }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">location</span> <span style="color:#e6db74">@dokuwiki</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/sitemap.xml.gz</span> <span style="color:#e6db74">/?do=sitemap</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/_media/(.*)</span> <span style="color:#e6db74">/lib/exe/fetch.php?media=</span>$1 <span style="color:#e6db74">last</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/_detail/(.*)</span> <span style="color:#e6db74">/lib/exe/detail.php?media=</span>$1 <span style="color:#e6db74">last</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/_export/([^/]+)/(.*)</span> <span style="color:#e6db74">/doku.php?do=export_</span>$1&amp;id=$2 <span style="color:#e6db74">last</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/(.*)</span> <span style="color:#e6db74">/doku.php?id=</span>$1 <span style="color:#e6db74">last</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">location</span> ~ <span style="color:#e6db74">\.php$</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">try_files</span> $uri =<span style="color:#ae81ff">404</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_pass</span> <span style="color:#e6db74">unix:/var/run/php/php8.1-fpm.sock</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_index</span>  <span style="color:#e6db74">index.php</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_param</span>  <span style="color:#e6db74">SCRIPT_FILENAME</span> $document_root$fastcgi_script_name;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">include</span> <span style="color:#e6db74">/etc/nginx/fastcgi_params</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_param</span>  <span style="color:#e6db74">QUERY_STRING</span>     $query_string;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_param</span>  <span style="color:#e6db74">REQUEST_METHOD</span>   $request_method;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_param</span>  <span style="color:#e6db74">CONTENT_TYPE</span>     $content_type;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_param</span>  <span style="color:#e6db74">CONTENT_LENGTH</span>   $content_length;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_intercept_errors</span>        <span style="color:#66d9ef">on</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_ignore_client_abort</span>     <span style="color:#66d9ef">off</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_connect_timeout</span> <span style="color:#ae81ff">60</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_send_timeout</span> <span style="color:#ae81ff">180</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_read_timeout</span> <span style="color:#ae81ff">180</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_buffer_size</span> <span style="color:#ae81ff">128k</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_buffers</span> <span style="color:#ae81ff">4</span> <span style="color:#ae81ff">256k</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_busy_buffers_size</span> <span style="color:#ae81ff">256k</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">fastcgi_temp_file_write_size</span> <span style="color:#ae81ff">256k</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">location</span> ~ <span style="color:#e6db74">/(data|conf|bin|inc)/</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">deny</span> <span style="color:#e6db74">all</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></td></tr></table>
</div>
</div></div>
    </details>
</div>

<div class="shortcode-notice warnung">
    <div class="shortcode-notice-title warnung">
        Warnung</div>
    <div class="notice-content">In Zeile 35 muss man den genauen Pfad zum php-fpm anpassen, falls man eine andere Version verwendet.</div>
</div>



<h3 id="altes-backup-des-wikis-ins-lokale-webserver-verzeichnis-kopieren" data-numberify>Altes Backup des Wikis ins lokale Webserver-Verzeichnis kopieren<a class="anchor ms-1" href="#altes-backup-des-wikis-ins-lokale-webserver-verzeichnis-kopieren"></a></h3>
<p>Ich habe natürlich noch ein Backup des gesamten htdocs-Verzeichnisses meines alten Wikis. Dieses habe ich nach <code>/home/wiki.natenom.me/htdocs/</code> kopiert und anschließend dem Benutzer <code>www-data</code> und der zugehörigen Gruppe zugänglich gemacht.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>chown -R www-data: /home/wiki.natenom.de/htdocs/
</span></span></code></pre></div><p>Das Wiki sollte jetzt per Browser benutzbar sein via <code>http://wiki.natenom.me/</code>.</p>

<h2 id="lokales-wiki-konfigurieren" data-numberify>Lokales Wiki konfigurieren<a class="anchor ms-1" href="#lokales-wiki-konfigurieren"></a></h2>

<h3 id="topbar" data-numberify>TopBar<a class="anchor ms-1" href="#topbar"></a></h3>
<p>Um deutlich zu zeigen, dass dieses Wiki archiviert wurde, habe ich die <a  class='urlextern'  href="https://www.dokuwiki.org/tips:topbar">TopBar-Funktion</a> von DokuWiki genutzt, sodass oben am Rand auf jeder Seite dieser Text angezeigt wird:</p>
<p><a  href="2022-10-27-screenshot-wiki-topbar.webp"></p><figure class="image-caption"><picture><source type="webp" srcset="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-topbar.webp" />
			         <img alt="" src="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-topbar.webp" title="" width="663" height="19" loading="lazy" /></picture><figcaption></figcaption></figure><p>
</a></p>
<p>Der Quelltext der Seite <code>/topbar</code> ist:</p>
<pre tabindex="0"><code class="language-dokuwiki" data-lang="dokuwiki">//Dieses Wiki wurde archiviert und wird nicht mehr gepflegt. Mein neues Wiki gibt es auf [[natwikic&gt;|wiki.natenom.com]]. Details auf der [[:|Startseite]].//
</code></pre>
<h3 id="feeds" data-numberify>Feeds<a class="anchor ms-1" href="#feeds"></a></h3>
<p>Ich habe dieses Mal die Feeds des Wikis deaktiviert.</p>

<h3 id="indexmenu" data-numberify>Indexmenu<a class="anchor ms-1" href="#indexmenu"></a></h3>
<p>Das Indexmenü habe ich dieses Mal so eingestellt, dass weiterhin JavaScript genutzt wird. Der Quelltext von <code>/wiki/sidebar</code> dazu ist:</p>
<pre tabindex="0"><code class="language-dokuwiki" data-lang="dokuwiki">**Navigation**
{{indexmenu&gt;..#2|js#indextheme useheading navbar tsort noscroll nsort notoc nomenu }}
\\
----
    * [[:datenschutz|Datenschutz]]
    * [[nblog&gt;impressum/|Impressum]]
    * [[:lizenz|Lizenz]]
    * [[:ueber|Über]]
</code></pre><p>Parameter erklärt:</p>
<ul>
<li>Die <code>#2</code> bewirkt, dass alle Seiten bis zur zweiten Ebene immer geöffnet sind. So sieht man auch mit deaktiviertem JavaScript noch die großen beiden Bereiche Minecraft und Mumble des Wikis in der Navigation.</li>
<li><code>nomenu</code> deaktiviert das Rechtsklick-Menü im Indexmenüs.</li>
</ul>
<p>Da die Grafiken für das Indexmenü später nicht mit wget heruntergeladen werden, muss man sie manuell in <code>/lib/plugins/indexmenu/images/</code> des heruntergeladenen Wikis platzieren. Die passenden Bilder gibt es in <code>/lib/plugins/indexmenu/images/</code> des Webservers. Da ich das Default-Theme verwende, werden nur die im Hauptverzeichnis benötigt und dazu das Verzeichnis <code>indextheme/</code>.</p>
<div class="shortcode-details">
    <details>
    <summary>Verzeichnisauflistung der benötigten Dateien:</summary>
        <div class="shortcode-details content"><pre tabindex="0"><code>    .
    ├── close.gif
    ├── empty.gif
    ├── indexmenu_toolbar.png
    ├── indextheme
    │   ├── base.gif
    │   ├── empty.gif
    │   ├── folder.gif
    │   ├── folderh.gif
    │   ├── folderhopen.gif
    │   ├── folderopen.gif
    │   ├── info.txt
    │   ├── joinbottom.gif
    │   ├── join.gif
    │   ├── line.gif
    │   ├── minusbottom.gif
    │   ├── minus.gif
    │   ├── page.gif
    │   ├── plusbottom.gif
    │   └── plus.gif
    ├── larrow.gif
    ├── msort.gif
    ├── rarrow.gif
    └── toc_bullet.gif
</code></pre></div>
    </details>
</div>

<div class="shortcode-notice warnung">
    <div class="shortcode-notice-title warnung">
        Warnung</div>
    <div class="notice-content">Damit das Indexmenü mit JavaScript funktioniert, darf solch ein Header nicht im Webserver gesetzt sein: <code>add_header X-Content-Type-Options nosniff</code>.</div>
</div>



<h3 id="bereiche-entfernen" data-numberify>Bereiche entfernen<a class="anchor ms-1" href="#bereiche-entfernen"></a></h3>
<p>Jetzt werden die bereits migrierten Themenbereiche bzw. Namensräume aus dem Wiki entfernt.</p>
<p>In meinem Fall ist das alles innerhalb von <code>/data/</code>, das nicht zu Mumble, Minecraft oder dem Wiki selbst gehört.</p>
<p>Dazu löscht man die Namensräume (Verzeichnisse) und Dateien in diesen Bereichen:</p>
<ul>
<li><code>/data/cache/</code></li>
<li><code>/data/media/</code></li>
<li><code>/data/media_attic/</code></li>
<li><code>/data/media_meta/</code></li>
<li><code>/data/meta/</code></li>
<li><code>/data/pages/</code></li>
</ul>
<p>Danach könnte man sich im Wiki anmelden und den Suchindex neu erstellen lassen, falls man die Suche noch testweise verwenden möchte. Für die archivierte Seite ist der Suchindex jedoch irrelevant, da die Suche PHP benötigt und abgeschaltet sein wird.</p>
<div class="shortcode-notice hinweis">
    <div class="shortcode-notice-title hinweis">
        Hinweis</div>
    <div class="notice-content">Da ich auch später noch in der Lage sein möchte, lokal im Webserver sowohl auf das komplette Wiki als auch auf das reduzierte Wiki (nur noch die im alten Wiki verbliebenen Themenbereiche <code>Mumble</code>, <code>Minecraft</code>, <code>Wiki</code> und <code>Über</code>) zugreifen und Änderungen vornehmen zu können, habe ich das wie folgt gelöst: Es gibt zwei Varianten des Verzeichnisses <code>/data/</code>. Das passende binde ich dann auf dem lokalen Webserver per Symlink ein.</div>
</div>



<h3 id="optional-history-entfernen" data-numberify>Optional History entfernen<a class="anchor ms-1" href="#optional-history-entfernen"></a></h3>
<p>Da mit dieser Anleitung hier immer nur der aktuelle Status einer Seite heruntergeladen wird und die History deaktiviert ist, kann man diese komplett aus dem Wiki entfernen. Oder es einfach sein lassen, weil es darauf keinen Zugriff geben wird.</p>
<p>Ich will es trotzdem hier erwähnt lassen, weil man so Daten löschen kann, die sowieso keinen Zweck mehr haben auf einer statischen Website.</p>
<p>Dazu das Verzeichnis <code>/data/attic/</code> leeren, aber nicht löschen. Genauso kann man mit <code>/data/media_attic/</code>, mit <code>/data/media_meta/</code> und mit <code>/data/meta/</code> verfahren.</p>

<h2 id="wiki-vom-lokalen-webserver-herunterladen" data-numberify>Wiki vom lokalen Webserver herunterladen<a class="anchor ms-1" href="#wiki-vom-lokalen-webserver-herunterladen"></a></h2>
<p>Nun wird das Wiki vom lokalen Webserver heruntergeladen, die Startseite verfügbar gemacht, die sonst fehlt und die Sitemap heruntergeladen.</p>
<div class="shortcode-codewarning">
    <details>
    <summary class="shortcode-codewarning summary">Vorsicht beim Ausführen von Shellkommandos via Copy & Paste</summary>
        <div class="shortcode-codewarning content"><p>
        Man sollte Shellkommandos aus Anleitungen, die in einem Browser angezeigt werden, grundsätzlich nicht einfach ungeprüft in die Shell einfügen und ausführen.</p>
        <p>Denn es ist möglich, Teile des Codes z. B. via CSS zu verstecken. Diese Teile werden aber trotzdem kopiert und landen auch in der Shell, wo sie ausgeführt werden.</p>
        <p>Besser ist es, die Kommandos erst in einen lokalen Texteditor einzufügen und dort zu prüfen, bevor man die ausführt.<p>
        <p>Kopiere doch mal dieses Beispiel und füge es – in die Shell (!NEIN) – in einen Editor ein:</p>
        <p><code>echo "Befehl 1"; <span class="shortcode-codewarning hidden">echo "Befehl 2. Im Browser unsichtbar, da font-size per CSS auf 0 gestellt wurde. Hier könnte z. B. die Festplatte gelöscht oder andere Dummheiten gemacht werden."; </span>echo "Befehl 3"</code></p></div>
    </details>
</div>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>mkdir wiki_download
</span></span><span style="display:flex;"><span>cd wiki_download
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names<span style="color:#f92672">=</span>unix --no-parent --reject-regex <span style="color:#e6db74">&#39;do=&#39;</span> -erobots<span style="color:#f92672">=</span>off --domains wiki.natenom.me http://wiki.natenom.me
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>cd wiki.natenom.me
</span></span><span style="display:flex;"><span>cp index.html start.html
</span></span><span style="display:flex;"><span>wget http://wiki.natenom.me/sitemap.xml.gz
</span></span></code></pre></div>
<h2 id="nachbearbeitung" data-numberify>Nachbearbeitung<a class="anchor ms-1" href="#nachbearbeitung"></a></h2>

<h3 id="lokal-verwendete-domain-durch-die-spätere-richtige-domain-ersetzen" data-numberify>Lokal verwendete Domain durch die spätere, richtige Domain ersetzen<a class="anchor ms-1" href="#lokal-verwendete-domain-durch-die-spätere-richtige-domain-ersetzen"></a></h3>
<p>Jetzt ersetzt man die massenhaft im heruntergeladenen Wiki hinterlegte lokal Domain durch die spätere, richtige Domain, die online verwendet wird.</p>
<p>Zuerst rekursiv in allen Dateien via <code>sed</code> und dann explizit in der <code>sitemap.xml.gz</code> und auch noch in <code>lib/exe/manifest.php</code>, wo aus irgendwelchen Gründen nur <code>localhost</code> steht.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cd wiki_download
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>shopt -s globstar ; <span style="color:#66d9ef">for</span> file in **/*; <span style="color:#66d9ef">do</span> test -f <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>file<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#f92672">&amp;&amp;</span> sed -i -e <span style="color:#e6db74">&#39;s#http://wiki.natenom.me/#https://wiki.natenom.de/#g&#39;</span> <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>file<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>; <span style="color:#66d9ef">done</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>gunzip sitemap.xml.gz
</span></span><span style="display:flex;"><span>sed -i -e <span style="color:#e6db74">&#39;s#http://localhost/./#https://wiki.natenom.de/#g&#39;</span> sitemap.xml
</span></span><span style="display:flex;"><span>gzip sitemap.xml
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>sed -i -e <span style="color:#e6db74">&#39;s#http:\\/\\/wiki.natenom.me\\/#https:\\/\\/wiki.natenom.de\\/#g&#39;</span> lib/exe/manifest.php
</span></span></code></pre></div>
<h3 id="eine-404-seite" data-numberify>Eine 404-Seite<a class="anchor ms-1" href="#eine-404-seite"></a></h3>
<p>Zusätzlich habe ich noch eine 404-Seite hinzugefügt, die erwähnt, dass das Wiki archiviert wurde. Diese legt man im Hauptverzeichnis des heruntergeladenen Wikis als Datei <code>404.html</code> ab und verweist in der Nginx-Konfiguration auf diese via <code>error_page 404 /404.html;</code>.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">html</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">body</span>&gt;&lt;<span style="color:#f92672">h1</span>&gt;404 - File not found&lt;/<span style="color:#f92672">h1</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">p</span>&gt;Das Wiki auf wiki.natenom.de wurde archiviert und in eine &lt;<span style="color:#f92672">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://natenom.de/2022/03/dokuwiki-in-statische-website-umwandeln/&#34;</span>&gt;statische Website umgewandelt&lt;/<span style="color:#f92672">a</span>&gt;.&lt;/<span style="color:#f92672">p</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">p</span>&gt;Daher gibt es an vielen Stellen, f&amp;uuml;r die PHP notwendig w&amp;auml;re, eine 404 (File not found) Fehlermeldung.&lt;/<span style="color:#f92672">p</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">p</span>&gt;Du kannst eine externe Suchmaschine benutzen, um Inhalte zu finden.&lt;/<span style="color:#f92672">p</span>&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">body</span>&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">html</span>&gt;
</span></span></code></pre></div>
<h2 id="packen-und-hochladen" data-numberify>Packen und hochladen<a class="anchor ms-1" href="#packen-und-hochladen"></a></h2>
<p>Das lokal heruntergeladene Wiki kann jetzt gepackt und hochgeladen werden.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cd wiki_download
</span></span><span style="display:flex;"><span>zip -r wiki.natenom.me.zip wiki.natenom.me/
</span></span></code></pre></div><p>Dann lädt man es, wie auch immer, auf den Webserver hoch und entpackt es in das entsprechende htdocs-Verzeichnis, setzt die Berechtigungen passend und startet den Webserver neu.</p>

<h2 id="ergebnis" data-numberify>Ergebnis<a class="anchor ms-1" href="#ergebnis"></a></h2>
<p>So sah die Startseite des archivierten Wikis bisher aus:</p>
<p><a  href="2022-10-27-screenshot-wiki-alt.webp"></p><figure class="image-caption"><picture>
                <source type="image/webp" srcset="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-alt_huc5aeacd14e81d54f7e5512bd79803b64_146634_360x0_resize_q95_h2_catmullrom_2.webp 360w,/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-alt_huc5aeacd14e81d54f7e5512bd79803b64_146634_500x0_resize_q95_h2_catmullrom_2.webp 500w,/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-alt_huc5aeacd14e81d54f7e5512bd79803b64_146634_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-alt_huc5aeacd14e81d54f7e5512bd79803b64_146634_360x0_resize_q95_h2_catmullrom_2.webp 360w, /2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-alt_huc5aeacd14e81d54f7e5512bd79803b64_146634_500x0_resize_q95_h2_catmullrom_2.webp 500w, /2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-alt_huc5aeacd14e81d54f7e5512bd79803b64_146634_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-alt_huc5aeacd14e81d54f7e5512bd79803b64_146634_816x0_resize_q95_h2_catmullrom_2.webp" title="" loading="lazy" width="816" height="521" /></picture><figcaption></figcaption></figure><p>
</a></p>
<p>Und so sieht sie jetzt aus:</p>
<p><a  href="2022-10-27-screenshot-wiki-neu-cover.webp"></p><figure class="image-caption"><picture>
                <source type="image/webp" srcset="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-cover_hu8bfc3922ee848a2232e2385a2c190180_175540_360x0_resize_q95_h2_catmullrom_2.webp 360w,/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-cover_hu8bfc3922ee848a2232e2385a2c190180_175540_500x0_resize_q95_h2_catmullrom_2.webp 500w,/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-cover_hu8bfc3922ee848a2232e2385a2c190180_175540_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-cover_hu8bfc3922ee848a2232e2385a2c190180_175540_360x0_resize_q95_h2_catmullrom_2.webp 360w, /2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-cover_hu8bfc3922ee848a2232e2385a2c190180_175540_500x0_resize_q95_h2_catmullrom_2.webp 500w, /2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-cover_hu8bfc3922ee848a2232e2385a2c190180_175540_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-cover_hu8bfc3922ee848a2232e2385a2c190180_175540_816x0_resize_q95_h2_catmullrom_2.webp" title="" loading="lazy" width="816" height="506" /></picture><figcaption></figcaption></figure><p>
</a></p>
<p>Und so sieht es ohne JavaScript aus:</p>
<p><a  href="2022-10-27-screenshot-wiki-neu-ohne-js.webp"></p><figure class="image-caption"><picture>
                <source type="image/webp" srcset="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-ohne-js_hu26fdafb3cc1953cfb6275eef5a30d42c_182906_360x0_resize_q95_h2_catmullrom_2.webp 360w,/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-ohne-js_hu26fdafb3cc1953cfb6275eef5a30d42c_182906_500x0_resize_q95_h2_catmullrom_2.webp 500w,/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-ohne-js_hu26fdafb3cc1953cfb6275eef5a30d42c_182906_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-ohne-js_hu26fdafb3cc1953cfb6275eef5a30d42c_182906_360x0_resize_q95_h2_catmullrom_2.webp 360w, /2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-ohne-js_hu26fdafb3cc1953cfb6275eef5a30d42c_182906_500x0_resize_q95_h2_catmullrom_2.webp 500w, /2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-ohne-js_hu26fdafb3cc1953cfb6275eef5a30d42c_182906_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-ohne-js_hu26fdafb3cc1953cfb6275eef5a30d42c_182906_816x0_resize_q95_h2_catmullrom_2.webp" title="" loading="lazy" width="816" height="506" /></picture><figcaption></figcaption></figure><p>
</a></p>
<p>Und so, falls der Browser so eingestellt ist, dass das Dark-Theme bevorzugt wird:</p>
<p><a  href="2022-10-27-screenshot-wiki-neu-dark.webp"></p><figure class="image-caption"><picture>
                <source type="image/webp" srcset="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-dark_hu79fcf02a4da2f92f4b8e4bdc665d38f1_183448_360x0_resize_q95_h2_catmullrom_2.webp 360w,/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-dark_hu79fcf02a4da2f92f4b8e4bdc665d38f1_183448_500x0_resize_q95_h2_catmullrom_2.webp 500w,/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-dark_hu79fcf02a4da2f92f4b8e4bdc665d38f1_183448_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-dark_hu79fcf02a4da2f92f4b8e4bdc665d38f1_183448_360x0_resize_q95_h2_catmullrom_2.webp 360w, /2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-dark_hu79fcf02a4da2f92f4b8e4bdc665d38f1_183448_500x0_resize_q95_h2_catmullrom_2.webp 500w, /2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-dark_hu79fcf02a4da2f92f4b8e4bdc665d38f1_183448_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-dark_hu79fcf02a4da2f92f4b8e4bdc665d38f1_183448_816x0_resize_q95_h2_catmullrom_2.webp" title="" loading="lazy" width="816" height="506" /></picture><figcaption></figcaption></figure><p>
</a></p>

<h2 id="anmerkungen-für-mich" data-numberify>Anmerkungen für mich<a class="anchor ms-1" href="#anmerkungen-für-mich"></a></h2>
<ul>
<li>Im Gegensatz zu früher heißt <code>/.cdn/</code> jetzt <code>/_cdn/</code> und wurde entsprechend in den Konfigurationen angepasst.</li>
</ul>]]></content:encoded><enclosure url="https://natenom.de/2022/10/altes-archiviertes-wiki.natenom.de-verbessert/2022-10-27-screenshot-wiki-neu-cover.webp" length="175540" type="image/webp"/></item><item><title>Umzug von DokuWiki nach Hugo – Teil 4 – Einrichten und fertig</title><link>https://natenom.de/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/</link><pubDate>Sun, 20 Mar 2022 15:09:47 +0100</pubDate><guid>https://natenom.de/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/</guid><description>&lt;p>Heute geht es weiter mit der Einrichtung meines neuen Wikis, das seit heute nachmittag &lt;a href="https://wiki.natenom.de/">bereits online ist&lt;/a>.&lt;/p></description><content:encoded><![CDATA[<p>Heute geht es weiter mit der Einrichtung meines neuen Wikis, das seit heute nachmittag <a  href="https://wiki.natenom.de/">bereits online ist</a>.</p>
<h2 id="zugriff-auf-informationen-von-git" data-numberify>Zugriff auf Informationen von Git<a class="anchor ms-1" href="#zugriff-auf-informationen-von-git"></a></h2>
<p>Das Theme <code>docsy</code>, das ich für mein neues Wiki verwende, zeigt auf Wunsch und mit Hilfe von Git Zusatzinformationen an.</p>
<p>Zur Aktivierung trägt man die folgende Zeile in den Hauptbereich der Konfiguration in der <code>config.toml</code> ein:</p>
<pre><code>enableGitInfo = true
</code></pre>
<p>Ich werde das für meinen Blog erst aktivieren, wenn es ein öffentliches Repo für mein Wiki gibt.</p>

<h3 id="letzte-bearbeitung-und-beschreibung" data-numberify>Letzte Bearbeitung und Beschreibung<a class="anchor ms-1" href="#letzte-bearbeitung-und-beschreibung"></a></h3>
<p>Wenn Git aktiviert ist, wird automatisch unter jeder Seite das Datum der letzten Bearbeitung angezeigt, dazu die Commit-ID und die Commit-Beschreibung.</p>
<p></p><figure class="image-caption"><picture><source type="png" srcset="/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-19-screenshot-wiki.natenom.com-letzte-bearbeitung-git.png" />
			         <img alt="" src="/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-19-screenshot-wiki.natenom.com-letzte-bearbeitung-git.png" title="" width="530" height="109" loading="lazy" /></picture><figcaption></figcaption></figure><p>
</p>

<h3 id="links-zum-git-repo" data-numberify>Links zum Git-Repo<a class="anchor ms-1" href="#links-zum-git-repo"></a></h3>
<p>Dann trägt man noch im Bereich <code>[params]</code> in der <code>config.toml</code> die Variable <code>github_repo = &quot;https://github.com/&lt;user&gt;/&lt;repo&gt;&quot;</code> ein.</p>
<p>Dann werden auch Links generiert, die auf den letzten Commit einer Seite verlinken.</p>
<div class="shortcode-notice hinweis">
    <div class="shortcode-notice-title hinweis">
        Hinweis</div>
    <div class="notice-content">Ich überlege noch, ob ich das Wiki in Zukunft in ein öffentliches Repo auf Github oder eine andere Plattform legen werde. Es könnte aber auch ein privates Repo sein, damit man zumindest Pull Requests und Issues erstellen könnte. Hat dazu jemand Erfahrungen, würde mich gerne dazu austauschen.</div>
</div>

<h2 id="feeds" data-numberify>Feeds<a class="anchor ms-1" href="#feeds"></a></h2>
<p>Man kann noch den Atom Feed für die Website aktivieren mit:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[<span style="color:#a6e22e">outputs</span>]
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">section</span> = [ <span style="color:#e6db74">&#34;HTML&#34;</span>, <span style="color:#e6db74">&#34;RSS&#34;</span> ]</span></span></code></pre></div>
<div class="shortcode-notice warnung">
    <div class="shortcode-notice-title warnung">
        Warnung</div>
    <div class="notice-content"><p>Meine Seiten im Wiki haben bisher kein Datum im Front Matter und es wird leider nicht das letzte Änderungsdatum mit Git ausgelesen, sodass die Datumsangaben im Feed mit <code>&lt;pubDate&gt;Mon, 01 Jan 0001 00:00:00 +0000&lt;/pubDate&gt;</code> angegeben werden.</p>
<p>In der Sitemap sind dagegen valide Datumsangaben enthalten, die scheinbar von Git kommen. Ich werde mir das genauer anschauen und versuchen, das auch für den Feed so hinzubiegen.</p>
<p>Deshalb habe ich den Feed für mein Wiki noch nicht aktiviert.</p>
</div>
</div>

<h2 id="druckansicht" data-numberify>Druckansicht<a class="anchor ms-1" href="#druckansicht"></a></h2>
<p>Es gibt im Theme auch die Möglichkeit, eine Druckansicht hinzufügen (rechts oben), die dann z. B. den gesamten Hauptbereich <a  href="https://wiki.natenom.de/docs/fahrrad">Fahrrad</a> in einer einzigen Seite anzeigt. Das werde ich vielleicht später aktivieren.</p>
<p>Dazu muss man in der <code>config.toml</code> noch im Bereich <code>outputs</code> hinzufügen:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[<span style="color:#a6e22e">outputs</span>]
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">section</span> = [ <span style="color:#e6db74">&#34;HTML&#34;</span>, <span style="color:#e6db74">&#34;RSS&#34;</span>, <span style="color:#e6db74">&#34;print&#34;</span> ]</span></span></code></pre></div>
<p><a  class='urlextern'  href="https://www.docsy.dev/docs/adding-content/print/">Dokumentation</a></p>

<h2 id="startseite-meines-neuen-wikis" data-numberify>Startseite meines neuen Wikis<a class="anchor ms-1" href="#startseite-meines-neuen-wikis"></a></h2>
<p>Ich kann ja nix bei so Websachen, das weiß man ja. Deshalb versuche ich immer, das irgendwie zu nutzen, war mir das System vorgibt, wie zum Beispiel die Möglichkeit des Themes Docsy, ein Cover auf der Startseite zu nutzen. Dessen Beschreibung <a  class='urlextern'  href="https://www.docsy.dev/docs/adding-content/shortcodes/#blockscover">gibt es hier</a>.</p>
<p>Die Themenbereiche darunter wurden mit dem Shortcode <code>Card Pane</code> erstellt. Hier die <a  class='urlextern'  href="https://www.docsy.dev/docs/adding-content/shortcodes/#card-panes">Dokumentation dazu</a>.</p>
<p>Dafür ist die Datei <code>content/de/_index.md</code> zuständig. Dieser Inhalt wird immer angezeigt, wenn man auf das Document Root der Webseite geht (also <code>/</code>).</p>
<p>So sieht die Startseite aktuell aus:</p>
<p></p><figure class="image-caption"><a href="/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-wiki.natenom.com-startseite.png"><picture>
                <source type="image/webp" srcset="/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-wiki.natenom.com-startseite_huad83697db2d152a4d1314f008e655fdc_157723_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-wiki.natenom.com-startseite_huad83697db2d152a4d1314f008e655fdc_157723_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-wiki.natenom.com-startseite_huad83697db2d152a4d1314f008e655fdc_157723_816x0_resize_q95_h2_catmullrom_3.webp 816w, /2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-wiki.natenom.com-startseite_huad83697db2d152a4d1314f008e655fdc_157723_1632x0_resize_q95_h2_catmullrom_3.webp 1632w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px,(min-width: 1200px) 1632px" />
                <img alt="" srcset="/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-wiki.natenom.com-startseite_huad83697db2d152a4d1314f008e655fdc_157723_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-wiki.natenom.com-startseite_huad83697db2d152a4d1314f008e655fdc_157723_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-wiki.natenom.com-startseite_huad83697db2d152a4d1314f008e655fdc_157723_816x0_resize_q95_h2_catmullrom_3.webp 816w,/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-wiki.natenom.com-startseite_huad83697db2d152a4d1314f008e655fdc_157723_1632x0_resize_q95_h2_catmullrom_3.webp 1632w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px,(min-width: 1200px) 1632px"
                     src="/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-wiki.natenom.com-startseite_huad83697db2d152a4d1314f008e655fdc_157723_816x0_resize_q95_h2_catmullrom_3.webp" title="" loading="lazy" width="816" height="425" /></picture></a><figcaption></figcaption></figure><p>
</p>
<div class="shortcode-notice hinweis">
    <div class="shortcode-notice-title hinweis">
        Hinweis</div>
    <div class="notice-content"><p>Per Voreinstellung landet man immer auf / des Wikis. Ich habe keine Möglichkeit gefunden, das zu ändern. Auch würde die Verlinkung des Namens des Wikis links oben gerne so ändern, dass auf <code>/docs</code> verlinkt wird.</p>
<p>Ich habe das erst einmal mit der Startseite gelöst.</p>
</div>
</div>
<div class="shortcode-notice tipp">
    <div class="shortcode-notice-title tipp">
        Tipp</div>
    <div class="notice-content">Es wäre zwar auch möglich, dass man <code>/docs</code> zum Document Root der Webseite macht, aber dadurch würde ich Flexibilität verlieren, die ich später vielleicht noch benutzen können möchte. (<a  href="/2022/03/umzug-dokuwiki-hugo-3-einrichtung/#kaskadierung--docsabc-vs-abc">Hier steht, wie man das machen könnte</a>).</div>
</div>

<h2 id="twitter-cards-und-open-graph" data-numberify>Twitter Cards und Open Graph<a class="anchor ms-1" href="#twitter-cards-und-open-graph"></a></h2>
<p><del>Über das Partial <code>docsy/assets/vendor/bootstrap/site/layouts/partials/social.html</code> werden Twitter Cards und Open Graph Metadaten im Docsy-Theme in eine Seite eingefügt. Dort sind auch <code>twitter:image</code> und <code>og:image</code> enthalten, z. B. für <code>twitter:image</code>:</del></p>
<pre><code>&lt;meta name=&quot;twitter:image&quot; content=&quot;{{ if .IsHome }}{{ .Site.Params.social_image_path | absURL }}{{ else }}{{ .Site.Params.social_logo_path | absURL }}{{ end }}&quot;&gt;
</code></pre>
<p><del>Für die Startseite des Wikis wird somit das Logo aus dem Bereich <code>params</code> in der Variable <code>social_image_path</code> verwendet und für alle anderen Seiten das aus der Variable <code>social_logo_path</code>im Front Matter der einzelnen Seite. Glaube ich. Es hat leider nicht funktioniert.</del></p>
<div class="shortcode-notice update">
    <div class="shortcode-notice-title update">
        Update</div>
    <div class="notice-content">10.04.2022: Ich habe mich heute erneut mit dem Theme beschäftigt und es funktioniert ganz anders. <a  href="/2022/04/docsy-theme-hugo-und-twitter-cards-open-graph/">Die Lösung ist in diesem Blogbeitrag beschrieben</a>.</div>
</div>



<h2 id="weiterleitungen" data-numberify>Weiterleitungen<a class="anchor ms-1" href="#weiterleitungen"></a></h2>
<p>Damit man auch über das alte Wiki noch zu den Inhalten des neuen Wikis kommt, habe ich alles entsprechend weitergeleitet.</p>
<p>Ich habe jeden Hauptbereich des alten wikis einzeln weitergeleitet mit:</p>
<pre><code>rewrite ^/android(.*)$ https://wiki.natenom.de/docs/android$1 redirect;
</code></pre>
<p>Somit kann ich links das Navigationsmenü im alten Wiki stehen lassen und man kommt auch bei Unterseiten im neuen Wiki an. Und auch Menschen, die auf irgend einer fremden Website auf einen Links zum alten Wiki klicken, landen im neuen Wiki.</p>
<div class="shortcode-notice tipp">
    <div class="shortcode-notice-title tipp">
        Tipp</div>
    <div class="notice-content"><p>Ein paar Bereiche habe ich im neuen Wiki umstrukturiert. So liegt z. B. die &ldquo;Radfahrer FAQ&rdquo; im neuen Wiki unterhalb von &ldquo;Fahrrad&rdquo; (<code>/fahrrad/faq/</code>), während sie im alten Wiki unterhalb von &ldquo;Mobilität&rdquo; (<code>/verkehr/projekte/radfahrer_faq/</code>) lag.</p>
<p>Doch auch in solchen Fällen kann man das einfach weiterleiten, da in der Konfiguration von Nginx immer die erste passende Weiterleitung gilt, auf die Nginx stößt. D. h. zuerst leitet man den kleinen, verschobenen Bereich um und dann erst den Rest:</p>
<pre><code>rewrite ^/verkehr/projekte/radfahrer_faq(.*)$ https://wiki.natenom.de/docs/fahrrad/faq$1 redirect;
rewrite ^/verkehr(.*)$ https://wiki.natenom.de/docs/mobilitaet$1 redirect;
</code></pre>
</div>
</div>

<h2 id="informationen-für-menschen--so-wichtig" data-numberify>Informationen für Menschen – So wichtig<a class="anchor ms-1" href="#informationen-für-menschen--so-wichtig"></a></h2>
<p>Für diejenigen Menschen, die in der Seitennavigation (links) im neuen Wiki die Themen vermissen, die nicht im neuen Wiki sind, habe ich für diese dort trotzdem Einträge erstellt. Klickt man diese an, bekommt man die Information, dass sie noch im alten Wiki zu finden sind.</p>
<p>Das betrifft die Bereiche <code>Minecraft</code>, <code>Mumble</code> und <code>Sauerbraten</code>.</p>
<p>Auf der Startseite des neuen Wikis sind diese Bereiche natürlich auch verlinkt.</p>

<h2 id="altes-wiki--keine-änderungen" data-numberify>Altes Wiki – &ldquo;keine Änderungen&rdquo;<a class="anchor ms-1" href="#altes-wiki--keine-änderungen"></a></h2>
<p>Das alte Wiki bleibt erst einmal so bestehen. Mit der Zeit werde ich dann vermutlich die weitergeleiteten Bereiche in der Seitennavigation ausblenden und vielleicht sogar ganz entfernen. Natürlich mit vorherigem Backup.</p>
<p>Dann könnte ich irgendwann einmal die alten Bereiche in eine statische Seite umwandeln und dann DokuWiki selbst entfernen. Dann bräuchte ich kein PHP mehr auf meinem Server.</p>

<h2 id="todo" data-numberify>Todo<a class="anchor ms-1" href="#todo"></a></h2>
<p>Von den <a  href="/2022/03/umzug-dokuwiki-hugo-3-einrichtung/#todo">Todos aus dem letzten Blogbeitrag</a> habe ich das Favicon umgesetzt. Wie das geht, <a  class='urlextern'  href="https://www.docsy.dev/docs/adding-content/iconsimages/#add-your-favicons">steht hier</a>.</p>
<p>Das mit der Nummerierung der Überschriften habe ich angefangen, aber es funktioniert bisher leider noch nicht.</p>
<p>Hinzu kommende Aufgaben:</p>
<ul>
<li>Alle Verlinkungen im Blog auf die umgezogenen Bereiche aufs neue Wiki umschreiben. Es gibt zwar Weiterleitungen, aber auf die will ich mich nicht dauerhaft verlassen.</li>
<li>Bilder für Twitter Cards und Open Graph <a  href="#twitter-cards-und-open-graph">siehe oben</a>.</li>
<li>Feed mit Änderungsdatum aus Git füttern.</li>
</ul>

<h2 id="passt-" data-numberify>Passt 🙂<a class="anchor ms-1" href="#passt-"></a></h2>
<p>Das passt so erst einmal für mich. Ich hatte damit extrem viel Arbeit in den letzten Tagen (und Wochen?) und bin froh, dass es jetzt fertig ist.</p>
<p>Und so sieht mein neues Wiki jetzt aus:</p>
<p></p><figure class="image-caption"><a href="/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-des-wikis-wiki.natenom.com.png"><picture>
                <source type="image/webp" srcset="/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-des-wikis-wiki.natenom.com_hu85df17ad9a736ca4911be8d1093e9d26_475016_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-des-wikis-wiki.natenom.com_hu85df17ad9a736ca4911be8d1093e9d26_475016_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-des-wikis-wiki.natenom.com_hu85df17ad9a736ca4911be8d1093e9d26_475016_816x0_resize_q95_h2_catmullrom_3.webp 816w, /2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-des-wikis-wiki.natenom.com_hu85df17ad9a736ca4911be8d1093e9d26_475016_1632x0_resize_q95_h2_catmullrom_3.webp 1632w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px,(min-width: 1200px) 1632px" />
                <img alt="Screenshot meines neuen Wikis" srcset="/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-des-wikis-wiki.natenom.com_hu85df17ad9a736ca4911be8d1093e9d26_475016_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-des-wikis-wiki.natenom.com_hu85df17ad9a736ca4911be8d1093e9d26_475016_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-des-wikis-wiki.natenom.com_hu85df17ad9a736ca4911be8d1093e9d26_475016_816x0_resize_q95_h2_catmullrom_3.webp 816w,/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-des-wikis-wiki.natenom.com_hu85df17ad9a736ca4911be8d1093e9d26_475016_1632x0_resize_q95_h2_catmullrom_3.webp 1632w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px,(min-width: 1200px) 1632px"
                     src="/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/images/2022-03-20-screenshot-des-wikis-wiki.natenom.com_hu85df17ad9a736ca4911be8d1093e9d26_475016_816x0_resize_q95_h2_catmullrom_3.webp" title="Screenshot meines neuen Wikis" loading="lazy" width="816" height="424" /></picture></a><figcaption>Screenshot meines neuen Wikis</figcaption></figure><p>
</p>]]></content:encoded><enclosure url="https://natenom.de/2022/03/umzug-dokuwiki-hugo-4-einrichtung-fertig/cover.png" length="157723" type="image/png"/></item><item><title>Nginx Konfiguration meines Blogs aufgeräumt</title><link>https://natenom.de/2022/02/nginx-konfiguration-fuer-hugo/</link><pubDate>Tue, 15 Feb 2022 00:38:55 +0100</pubDate><guid>https://natenom.de/2022/02/nginx-konfiguration-fuer-hugo/</guid><description>Mit dem Einsatz von Hugo, das ausschließlich statischen Dateien generiert, konnte ich die Konfiguration von Nginx für meinen Blog sehr einfach gestalten. Vielleicht hilft das anderen Menschen, die Hugo nutzen möchten.
Dazu gekommen sind die Weiterleitungen für Umlaute in URLs, wie ich hier beschrieben habe. Die am ersten Tag des Umzugs etwas unglück eingerichteten Weiterleitungen der in WordPress verfügbaren Feeds auf die von Hugo habe ich jetzt in schön geschrieben. (Eine gute Beschreibung der Feeds und deren URLs, die in WordPress automatisch erstellt werden, gibt es hier.</description><content:encoded><![CDATA[<p>Mit dem Einsatz von Hugo, das ausschließlich statischen Dateien generiert, konnte ich die Konfiguration von Nginx für meinen Blog sehr einfach gestalten. Vielleicht hilft das anderen Menschen, die Hugo nutzen möchten.</p>
<ul>
<li>Dazu gekommen sind die Weiterleitungen für Umlaute in URLs, <a  href="/2022/02/weiterleitungen-wordpress-url-nach-hugo-url-mit-umlauten/">wie ich hier beschrieben habe</a>.</li>
<li>Die am <a  href="/2022/01/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/">ersten Tag des Umzugs</a> etwas unglück eingerichteten Weiterleitungen der in WordPress verfügbaren Feeds auf die von Hugo habe ich jetzt in schön geschrieben. (Eine gute Beschreibung der Feeds und deren URLs, die in WordPress automatisch erstellt werden, <a  class='urlextern'  href="https://wordpress.org/support/article/wordpress-feeds/">gibt es hier</a>.)</li>
</ul>
<p>Somit ist die ganze Konfiguration für den Blog in Nginx relativ einfach geworden.</p>
<div class="shortcode-notice hinweis">
    <div class="shortcode-notice-title hinweis">
        Hinweis</div>
    <div class="notice-content">Ich bin kein Profi für die Konfiguration von Nginx. Es funktioniert so bei mir, es gibt aber keine Garantie, dass ich da nicht irgendwelchen Blödsinn veranstaltet habe.</div>
</div>


<p>Es könnte z. B. sein, dass es nicht sinnvoll ist, die URLs der Feeds der anderen Formate stumpf nach rss (<code>index.xml</code>) weiterzuleiten. Etwas anderes erzeugt Hugo per Voreinstellung aber nicht und ich will das auch nicht ändern.</p>
<p>Falls ich etwas Dummes getan habe, würde ich mich über einen Hinweis freuen. Danke.</p>
<div class="shortcode-notice hinweis">
    <div class="shortcode-notice-title hinweis">
        Hinweis</div>
    <div class="notice-content">Es ist bei solchen Angelegenheiten immer gut, wenn man die Logs des Webservers im Blick hat, vor allem Status 404. Dann fällt auf, wenn etwas nicht funktioniert. Zum Testen von Weiterleitungen nutze ich immer curl, denn es merkt sich keine Zustände zu Weiterleitungen, wie das Browser machen.</div>
</div>



<h2 id="serverconf" data-numberify>server.conf<a class="anchor ms-1" href="#serverconf"></a></h2>
<p>Die Anmerkungen von mir sind inline, da das besser zum Lesen ist:</p>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">44
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">45
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">46
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">47
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">48
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">49
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">50
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">51
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">52
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">53
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">54
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">55
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">56
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">57
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">58
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">59
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">60
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">61
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">62
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">63
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">64
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">65
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">66
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">67
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">68
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">69
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-nginx" data-lang="nginx"><span style="display:flex;"><span><span style="color:#66d9ef">server</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">[…]</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Das ganze drumherum an Konfiguration des Blogs in Nginx (TLS,
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># Header, Rootverzeichnis, Logs, …) ist in andere Dateien
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># ausgegliedert. Hier ist nur der relevante Teil für alle
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># Verzeichnisse und Weiterleitungen.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Weiterleiten der alten Sitemap URLs auf die neue.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># Es steht zwar auch schon in der robots.txt, man
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># kann es aber trotzdem machen.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#e6db74">rewrite</span> <span style="color:#e6db74">^/sitemap.xml.gz[/]?</span>$ <span style="color:#e6db74">/sitemap.xml</span> <span style="color:#e6db74">permanent</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/wp-sitemap-posts-post-2.xml</span>$ <span style="color:#e6db74">/sitemap.xml</span> <span style="color:#e6db74">permanent</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/wp-sitemap-posts-post-1.xml</span>$ <span style="color:#e6db74">/sitemap.xml</span> <span style="color:#e6db74">permanent</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Bei neu eingerichteten Weiterleitungen der alten Feeds
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># zu den Feeds von Hugo verwende ich den HTTP Status
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># Code 302 &#34;Found&#34;, sobald es sich als gut herausgestellt
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># hat, werde ich es auf 301 &#34;Moved permanently&#34; ändern.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/feed/(rss|rss2|rdf|atom)[/]?</span>$ <span style="color:#e6db74">/index.xml</span> <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/category/(.*)/feed/(rss|rss2|rdf|atom)[/]?</span>$ <span style="color:#e6db74">/categories/</span>$1/index.xml <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/tag/(.*)/feed/(rss|rss2|rdf|atom)[/]?</span>$ <span style="color:#e6db74">/tags/</span>$1/index.xml <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/(feed|rss|rss2|rdf|atom)[/]?</span>$ <span style="color:#e6db74">/index.xml</span> <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/category/(.*)/(feed|rss|rss2|rdf|atom)[/]?</span>$ <span style="color:#e6db74">/categories/</span>$1/index.xml <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/tag/(.*)/(feed|rss|rss2|rdf|atom)[/]?</span>$ <span style="color:#e6db74">/tags/</span>$1/index.xml <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Die Taxonomie ist in meinem Theme leicht anders als
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># in WordPress:
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/tag/(.*)</span>$ <span style="color:#e6db74">/tags/</span>$1 <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/category/(.*)</span>$ <span style="color:#e6db74">/categories/</span>$1 <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Umleitungen zu Umlaut-URLs (siehe unten
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># im Blogbeitrag)
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/categories/mobilitaet(.*)</span>$ <span style="color:#e6db74">/categories/mobilität</span>$1 <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/tags/mobilitaet(.*)</span>$ <span style="color:#e6db74">/tags/mobilität</span>$1 <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/tags/muell(.*)</span>$ <span style="color:#e6db74">/tags/müll</span>$1 <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">rewrite</span> <span style="color:#e6db74">^/tags/muellsammeln(.*)</span>$ <span style="color:#e6db74">/tags/müllsammeln</span>$1 <span style="color:#e6db74">redirect</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">[…]</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Habe das Verzeichnis der WordPress-Installation 1 zu 1
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># übernommen. Dort landen per Voreinstellung alle hochgeladenen
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># Dateien. Das Verzeichnis bleibt, da noch viele Beiträge
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># hier in Hugo das originale HTML von WordPress enthalten
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># und eingebettete Bilder von dort geladen werden und/oder
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># dorthin verweisen.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#e6db74">location</span> <span style="color:#e6db74">/wp-content/</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">alias</span> <span style="color:#e6db74">/pfad-zu/alten-wordpress-dateien/</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">include</span> <span style="color:#e6db74">pfad-zu/static_files.conf</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Alle Dateien bekommen eine maximal mögliche Lebenszeit.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#75715e"># Siehe nächster Abschnitt, wo die inkludierte Datei zu sehen ist.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#f92672">location</span> <span style="color:#e6db74">/</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">include</span> <span style="color:#e6db74">pfad-zu/static_files.conf</span>;
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}</span></span></code></pre></td></tr></table>
</div>
</div>
<p>Tipp: Hier ein Blogbeitrag zu <a  href="/2022/02/weiterleitungen-wordpress-url-nach-hugo-url-mit-umlauten/">Weiterleitungen zu Umlaut-URLs, die Hugo aus Tags mit Umlauten generiert</a>.</p>

<h2 id="static-filesconf" data-numberify>static-files.conf<a class="anchor ms-1" href="#static-filesconf"></a></h2>
<p>Auch hier sind Anmerkungen wegen der Lesbarkeit inline:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-nginx" data-lang="nginx"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1</span><span>    <span style="color:#66d9ef">if</span> <span style="color:#e6db74">(</span>$request_uri ~<span style="color:#e6db74">*</span> <span style="color:#e6db74">&#34;.(jpg|jpeg|gif|zip|gz|avi|png|mpeg|mpg|txt|mp4|woff|woff2|ttf|eot)</span>$&#34;<span style="color:#e6db74">)</span> {
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2</span><span>            <span style="color:#f92672">expires</span> <span style="color:#e6db74">90d</span>;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3</span><span>    }
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7</span><span>    <span style="color:#75715e"># Das sind die von Hugo erstellen kleinen Varianten
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8</span><span><span style="color:#75715e"></span>    <span style="color:#75715e"># von Bildern für Thumbnails.
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9</span><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">if</span> <span style="color:#e6db74">(</span>$request_uri ~<span style="color:#e6db74">*</span> <span style="color:#e6db74">&#34;.*hu[a-z0-9]</span>{<span style="color:#f92672">32}.*resize.*$&#34;)</span> {
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10</span><span>        <span style="color:#f92672">expires</span> <span style="color:#e6db74">300d</span>;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11</span><span>        <span style="color:#f92672">break</span>;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12</span><span>    }
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16</span><span>    <span style="color:#75715e"># Das Verzeichnis, in dem JavaScript Assets landen.
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17</span><span><span style="color:#75715e"></span>    <span style="color:#75715e"># Sobald sich die Ursprungsdatei ändert, ändert sich
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18</span><span><span style="color:#75715e"></span>    <span style="color:#75715e"># auch der Hashwert im Namen, sodass man eine sehr
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19</span><span><span style="color:#75715e"></span>    <span style="color:#75715e"># lange Lebenszeit angeben kann.
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20</span><span><span style="color:#75715e"></span>    <span style="color:#f92672">if</span> <span style="color:#e6db74">(</span>$request_uri ~<span style="color:#e6db74">*</span> <span style="color:#e6db74">&#34;^/js/.*</span>$&#34;<span style="color:#e6db74">)</span> {
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21</span><span>        <span style="color:#f92672">expires</span> <span style="color:#e6db74">300d</span>;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22</span><span>        <span style="color:#f92672">break</span>;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23</span><span>    }
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27</span><span>    <span style="color:#75715e"># Hier gilt das selbe wie auch für die JavaScript
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28</span><span><span style="color:#75715e"></span>    <span style="color:#75715e"># Assets oben drüber.
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29</span><span><span style="color:#75715e"></span>    <span style="color:#f92672">if</span> <span style="color:#e6db74">(</span>$request_uri ~<span style="color:#e6db74">*</span> <span style="color:#e6db74">&#34;^/css/.*</span>$&#34;<span style="color:#e6db74">)</span> {
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30</span><span>        <span style="color:#f92672">expires</span> <span style="color:#e6db74">300d</span>;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31</span><span>        <span style="color:#f92672">break</span>;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32</span><span>    }
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36</span><span>    <span style="color:#75715e"># Eingebundenes CSS und JS für Dinge, die
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37</span><span><span style="color:#75715e"></span>    <span style="color:#75715e"># ich relativ oft verändern möchte. Auch Favicons
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38</span><span><span style="color:#75715e"></span>    <span style="color:#75715e"># möchte ich relativ schnell ändern können.
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39</span><span><span style="color:#75715e"></span>    <span style="color:#f92672">if</span> <span style="color:#e6db74">(</span>$request_uri ~<span style="color:#e6db74">*</span> <span style="color:#e6db74">&#34;.(css|ico|js)</span>$&#34;<span style="color:#e6db74">)</span> {
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40</span><span>        <span style="color:#f92672">expires</span> <span style="color:#e6db74">48h</span>;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41</span><span>    }</span></span></code></pre></div>
<p>Das wars. Für mich funktioniert das so gut. Anmerkungen bitte per E-Mail.</p>
<p>Danke :)</p>
]]></content:encoded></item><item><title>URL-Struktur in Hugo mit url, slug und title</title><link>https://natenom.de/2022/02/url-struktur-hugo-url-slug-title/</link><pubDate>Mon, 14 Feb 2022 14:23:51 +0100</pubDate><guid>https://natenom.de/2022/02/url-struktur-hugo-url-slug-title/</guid><description>Alles dank dem Export von WordPress Ich habe mich etwas mit der URL-Struktur hier im Blog beschäftigt. Da ich anfänglich fast nur auf Basis der aus WordPress exportierten Blogbeiträgt gearbeitete hatte, gewöhnte ich mir an, im Front Matter immer die Option url: anzugeben. Diese enthält immer den vollen Pfad der URL ab der baseURL. Letztere besteht in meinem Blog aus dem Protokoll (https) und dem Domainnamen.
Für diesen Blogbeitrag hätte ich somit im Front Matter eingetragen:</description><content:encoded><![CDATA[
<h2 id="alles-dank-dem-export-von-wordpress" data-numberify>Alles dank dem Export von WordPress<a class="anchor ms-1" href="#alles-dank-dem-export-von-wordpress"></a></h2>
<p>Ich habe mich etwas mit der URL-Struktur hier im Blog beschäftigt. Da ich anfänglich fast nur auf Basis der aus <a  href="/tags/wordpress/">WordPress</a> exportierten Blogbeiträgt gearbeitete hatte, gewöhnte ich mir an, im Front Matter immer die Option <code>url:</code> anzugeben. Diese enthält immer den vollen Pfad der URL ab der <code>baseURL</code>. Letztere besteht in meinem Blog aus dem Protokoll (https) und dem Domainnamen.</p>
<p>Für diesen Blogbeitrag hätte ich somit im Front Matter eingetragen:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">url</span>: <span style="color:#ae81ff">/2022/02/url-struktur-hugo-url-slug-title</span></span></span></code></pre></div>

<h2 id="nicht-gut" data-numberify>Nicht gut<a class="anchor ms-1" href="#nicht-gut"></a></h2>
<p>Das ist nicht optimal, denn man verliert die Flexibilität. So kann man nicht einfach mal irgendwann die URL-Struktur anpassen, weil in jedem Blogbeitrag schon die am höchsten priorisierte Option <code>url:</code> angegeben ist.</p>
<p>Außerdem braucht man es auch gar nicht, da es in der Konfiguration von Hugo einen Abschnitt gibt, der festlegt, wie die URL (nach der BaseURL) generiert werden soll.</p>

<h2 id="gut" data-numberify>Gut<a class="anchor ms-1" href="#gut"></a></h2>
<p>Ich habe die Konfiguration von Hugo umgestellt und werde in Zukunft nur noch <code>slug:</code> angeben. Der Slug ist der Teil der URL, der nur das Dokument des Blogbeitrags repräsentiert. Im oberen Beispiel wäre das <code>&quot;url-struktur-hugo-url-slug-title&quot;</code>.</p>
<p>Damit die URL-Struktur im Blog weiterhin so bleibt wie bisher (&quot;/jahr/monat/titel-des-beitrags/&quot;), habe ich in die <code>config.toml</code> eingetragen:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[<span style="color:#a6e22e">permalinks</span>]
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">posts</span> = <span style="color:#e6db74">&#39;/:year/:month/:slug/&#39;</span></span></span></code></pre></div></p>
<p>Die Voreinstellung, würde man das nicht einfügen, wäre:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span><span style="color:#e6db74">&#39;/:year/:month/:title/&#39;</span></span></span></code></pre></div></p>
<p>Die Voreinstellung will ich nicht, da ich teils lange Titel für Blogbeiträge habe, die URLs insgesamt aber relativ kurz halten möchte.</p>
<p>Jetzt verwende ich im Front Matter eines Blogbeitrags nur noch die Option <code>slug: </code> und habe im Endeffekt die selbe URL-Struktur und das ganze ist dadurch weniger fehleranfällig, falls man in der url bei Jahr oder Monat etwas Falsches einträgt.</p>
<p>Im Front Matter sah es früher so aus:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">title</span>: <span style="color:#ae81ff">URL-Struktur in Hugo mit url, slug und title</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">url</span>: <span style="color:#ae81ff">/2022/02/url-struktur-hugo-url-slug-title</span>
</span></span><span style="display:flex;"><span>[<span style="color:#ae81ff">…]</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>---</span></span></code></pre></div></p>
<p>Und jetzt so:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">title</span>: <span style="color:#ae81ff">URL-Struktur in Hugo mit url, slug und title</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">slug</span>: <span style="color:#ae81ff">url-struktur-hugo-url-slug-title</span>
</span></span><span style="display:flex;"><span>[<span style="color:#ae81ff">…]</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>---</span></span></code></pre></div></p>
<p>Erreichbar ist der Blogbeitrag in beiden Fällen unter:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>natenom.de/2022/02/url-struktur-hugo-url-slug-title</span></span></code></pre></div></p>
<div class="shortcode-update">
<p>Update: Ich wurde darauf hingewiesen, dass Hugo den Namen des Markdown-Dokuments bzw. den Verzeichnisnamen des Page Bundles automatisch als String für den Slug verwendet, wenn man die Option nicht explizit im Front Matter setzt.</p>
</div>


<h2 id="bestehende-blogbeiträge-per-script-ändern-irgendwann" data-numberify>Bestehende Blogbeiträge per Script ändern, irgendwann<a class="anchor ms-1" href="#bestehende-blogbeiträge-per-script-ändern-irgendwann"></a></h2>
<p>Und wenn ich dann irgendwann mal alle Front Matter der Blogbeiträge automatisiert von <code>url: </code> nach <code>slug: </code> ändere, habe ich dann sogar die Möglichkeit, mit einer einzigen Änderung in der <code>config.toml</code> die URL-Struktur für alle Blogbeiträge auf einmal zu verändern. Natürlich sollte man in so einem Fall dann Weiterleitungen einrichten.</p>
<p>Bis dahin gibt es keine Probleme mit der bestehenden URL-Struktur, da die Option <code>url:</code> im Front Matter eines Beitrags immer die höchste Priorität hat.</p>

<h2 id="dokumentation" data-numberify>Dokumentation<a class="anchor ms-1" href="#dokumentation"></a></h2>
<p>Die <a  class='urlextern'  href="https://gohugo.io/content-management/urls/">Dokumentation zu diesem Thema</a> findet sich auf der Projektseite von Hugo.</p>
]]></content:encoded></item><item><title>Beim Umzug von WordPress nach Hugo die Kurzlinks nicht vergessen</title><link>https://natenom.de/2022/02/umzug-wordpress-hugo-kurzlinks/</link><pubDate>Mon, 14 Feb 2022 01:13:29 +0100</pubDate><guid>https://natenom.de/2022/02/umzug-wordpress-hugo-kurzlinks/</guid><description>Hätte ich das mal vorher gewusst :)
ID vs Fancy URL WordPress hat für jeden Blogbeitrag eine eindeutige ID. Statt einer fancy URL mit ausgeschriebenem Titel wie natenom.de/2022/01/tschuess-wordpress-hallo-hugo kann man daher auch die ID verwenden wie z. B.: natenom.de/?p=12345.
Ich hatte das schon auf dem Schirm. Leider nur in Bezug auf Beitragsentwürfe, nicht auf Verlinkungen in meinem Wiki auf den Blog.
Viele Verlinkungen auf den Blog per ID Erst heute ist mir aufgefallen, dass es in meinem Wiki ca.</description><content:encoded><![CDATA[<p>Hätte ich das mal vorher gewusst :)</p>

<h2 id="id-vs-fancy-url" data-numberify>ID vs Fancy URL<a class="anchor ms-1" href="#id-vs-fancy-url"></a></h2>
<p>WordPress hat für jeden Blogbeitrag eine eindeutige ID. Statt einer fancy URL mit ausgeschriebenem Titel wie <code>natenom.de/2022/01/tschuess-wordpress-hallo-hugo</code> kann man daher auch die ID verwenden wie z. B.: <code>natenom.de/?p=12345</code>.</p>
<p>Ich hatte das schon <a  href="/2022/01/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/#entw%c3%bcrfe">auf dem Schirm</a>. Leider nur in Bezug auf Beitragsentwürfe, nicht auf Verlinkungen in <a  href="https://wiki.natenom.de/">meinem Wiki</a> auf den Blog.</p>

<h2 id="viele-verlinkungen-auf-den-blog-per-id" data-numberify>Viele Verlinkungen auf den Blog per ID<a class="anchor ms-1" href="#viele-verlinkungen-auf-den-blog-per-id"></a></h2>
<p>Erst heute ist mir aufgefallen, dass es in meinem Wiki ca. 70 solcher Verlinkungen gab, die ich alle per Hand in die fancy URL auflösen musste. Da war die Suchfunktion von Hugo sehr gut. Hätte ich das vor dem Abschalten von WordPress gemacht, hätte ich nur den Link im Browser eingeben müssen und WordPress hätte mich selbst zur fancy URL geleitet.</p>
<p>Man kann solche Links in einem DokuWiki sehr leicht finden. Zuerst wechselt man auf der Konsole in das Verzeichnis <code>data/pages</code> und fürt dann aus:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>grep -i -r <span style="color:#e6db74">&#39;\?p=&#39;</span> .</span></span></code></pre></div></p>

<h2 id="möglicherweise-zuordnung-automatisch-erzeugen" data-numberify>Möglicherweise Zuordnung automatisch erzeugen<a class="anchor ms-1" href="#möglicherweise-zuordnung-automatisch-erzeugen"></a></h2>
<p>Da ich noch den Export meines alten WordPress-Blogs habe, könnte ich sicher auch darin die IDs finden und dann basierend auf dem Export eine Zuordnung von ID zu URL erstellen. Das schaue ich mir später vielleicht noch an. Bis dahin laufen solche Verlinkungen auf meinen Blog ins Leere bzw. auf die Startseite. Das könnte ich dann vielleicht so erstellen wie die Weiterleitungen zu den <a  href="/2022/02/weiterleitungen-wordpress-url-nach-hugo-url-mit-umlauten/">URLs mit Umlauten</a>.</p>
<p>Die ID steht drin und die URL sind im Export enthalten:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span>[…]
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;link&gt;</span>natenom.de/2010/11/mumble-server-lauft-wieder-rund/<span style="color:#f92672">&lt;/link&gt;</span>
</span></span><span style="display:flex;"><span>[…]
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;wp:post_id&gt;</span>123<span style="color:#f92672">&lt;/wp:post_id&gt;</span>
</span></span><span style="display:flex;"><span>[…]</span></span></code></pre></div></p>

<h2 id="sinnvoll" data-numberify>Sinnvoll?<a class="anchor ms-1" href="#sinnvoll"></a></h2>
<p>Ich kann mich also daran versuchen. Ob es aber Sinn hat, aktuell über 2580 URL-Weiterleitungen von ID nach Fancy URL in der Nginx Konfiguratin zu haben?</p>
<p>Außerdem hatte ich schon fast immer Fancy URLs aktiviert. D. h. wenn überhaupt, dann hat man von außen nur zur Anfangszeit diese URLs aus der Adresseleiste des Browsers kopiert. Später habe ich die dann nur noch selbst benutzt, um Beiträge zu verlinken, die noch nicht öffentlich waren.</p>
]]></content:encoded></item><item><title>Weiterleitungen von alten WordPress-URLs auf Umlaut-URLs, wie Hugo sie erzeugt</title><link>https://natenom.de/2022/02/weiterleitungen-wordpress-url-nach-hugo-url-mit-umlauten/</link><pubDate>Sun, 13 Feb 2022 06:35:46 +0100</pubDate><guid>https://natenom.de/2022/02/weiterleitungen-wordpress-url-nach-hugo-url-mit-umlauten/</guid><description><![CDATA[Wie ich hier schon beschrieben habe, ersetzt Hugo bei URLs Umlaute nicht durch ihre Entsprechungen wie &ldquo;ae&rdquo;, &ldquo;oe&rdquo; usw, sondern behält sie bei. Ganz im Gegensatz zu WordPress.
Das bedeutet, dass z. B. die alte URL vom WordPress-Blog &ldquo;/tags/mobilitaet/&rdquo; in Hugo &ldquo;/tags/mobilität/&rdquo; heißt.
Ich hatte bereits am ersten Tag der Umstellung in ganz wenigen Fällen manuell Weiterleitungen erstellt, insgesamt nur drei.
Heute habe ich mich dann etwas damit beschäftigt, geprüft und festgestellt, dass es neben der Kategorie &ldquo;Mobilität&rdquo; noch 88 Tags mit Umlauten oder &ldquo;ß&rdquo; gibt.]]></description><content:encoded><![CDATA[<p>Wie ich <a  href="/2022/01/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/#umlaute-in-urls-von-kategorien-und-tags">hier</a> schon beschrieben habe, ersetzt Hugo bei URLs Umlaute nicht durch ihre Entsprechungen wie &ldquo;ae&rdquo;, &ldquo;oe&rdquo; usw, sondern behält sie bei. Ganz im Gegensatz zu WordPress.</p>
<p>Das bedeutet, dass z. B. die alte URL vom WordPress-Blog &ldquo;/tags/mobilitaet/&rdquo; in Hugo &ldquo;/tags/mobilität/&rdquo; heißt.</p>
<p>Ich hatte bereits am ersten Tag der Umstellung in ganz wenigen Fällen manuell Weiterleitungen erstellt, insgesamt nur drei.</p>
<p>Heute habe ich mich dann etwas damit beschäftigt, geprüft und festgestellt, dass es neben der Kategorie &ldquo;Mobilität&rdquo; noch 88 Tags mit Umlauten oder &ldquo;ß&rdquo; gibt.</p>
<p>Ich hatte nicht wirklich Lust, das alles manuell einzugeben, und so habe ich ein bisschen Shell-Magic benutzt, um das zu automatisieren. Das will ich hier genau beschreiben.</p>

<h2 id="überlegungen" data-numberify>Überlegungen<a class="anchor ms-1" href="#überlegungen"></a></h2>

<h3 id="nur-am-anfang" data-numberify>Nur am Anfang<a class="anchor ms-1" href="#nur-am-anfang"></a></h3>
<p>Diese ganzen Weiterleitungen muss man natürlich nur am Anfang nach dem Umzug von WordPress nach Hugo bereitstellen. Irgendwann werden Suchmaschinen von selbst auf die neuen URLs mit Umlauten umspringen. Aber ich verstehe nix von SEO. Mir gehts darum, dass ich mal gelernt habe, dass URLs möglichst immer bestehen bleiben sollten.</p>

<h3 id="alle-urls-umschreiben-nicht-nur-tags" data-numberify>Alle URLs umschreiben, nicht nur Tags<a class="anchor ms-1" href="#alle-urls-umschreiben-nicht-nur-tags"></a></h3>
<p>Es wäre auch möglich, zusätzlich noch alle URLs herauszufischen und die dann auch weiterzuleiten.</p>

<h3 id="nur-je-wort-nicht-allgemein-möglich" data-numberify>Nur je &ldquo;Wort&rdquo;, nicht allgemein möglich<a class="anchor ms-1" href="#nur-je-wort-nicht-allgemein-möglich"></a></h3>
<p>Weiterleitungen, die Umlaute für sich umschreiben, wären wohl keine gute Idee, weil die Teilstrings &ldquo;ae&rdquo;, &ldquo;oe&rdquo;, &ldquo;ue&rdquo; und &ldquo;ss&rdquo; auch so in URLs vorkommen könnten. Deshalb muss man die einzelnen Begriffe rausfischen und die Weiterleitungen basierend auf diesen erstellen.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>.*ss.* -&gt; .*ß.*
</span></span><span style="display:flex;"><span>.*oe.* -&gt; .*ö.*
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>keine gute Idee:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>essen -&gt; eßen
</span></span><span style="display:flex;"><span>oboe -&gt; obö</span></span></code></pre></div>
<p>Umgekehrt wäre das kein Problem.</p>

<h2 id="wie-es-geht" data-numberify>Wie es geht<a class="anchor ms-1" href="#wie-es-geht"></a></h2>

<h3 id="datei-1--die-aktuellen-tags-aus-hugo-auslesen" data-numberify>Datei 1 – Die aktuellen Tags aus Hugo auslesen<a class="anchor ms-1" href="#datei-1--die-aktuellen-tags-aus-hugo-auslesen"></a></h3>
<p>Ich verwende meinen <a  href="/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/">hier</a> beschriebenen Alias <code>hugo-search-tags</code>:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>hugo-search-tags -E <span style="color:#e6db74">&#34;(ä|ö|ü|ß)&#34;</span> | cut -d<span style="color:#e6db74">&#39;:&#39;</span> -f2 &gt; /tmp/umlaut-urls-hugo.txt</span></span></code></pre></div></p>
<p>Zum Verständis: Die Funktion hugo-search-tags gibt mir die Daten in diesem Format aus (<code>Anzahl:Tag</code>):
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>327:mobilität
</span></span><span style="display:flex;"><span>88:müll
</span></span><span style="display:flex;"><span>83:müllsammeln
</span></span><span style="display:flex;"><span>64:wälder
</span></span><span style="display:flex;"><span>51:landstraße
</span></span><span style="display:flex;"><span>51:fahrradanhänger
</span></span><span style="display:flex;"><span>33:überholen
</span></span><span style="display:flex;"><span>24:sonnenuntergänge
</span></span><span style="display:flex;"><span>[…]</span></span></code></pre></div></p>

<h3 id="datei-2--die-selben-tags-in-den-wordpress-stil-umwandeln" data-numberify>Datei 2 – Die selben Tags in den WordPress-Stil umwandeln<a class="anchor ms-1" href="#datei-2--die-selben-tags-in-den-wordpress-stil-umwandeln"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>hugo-search-tags -E <span style="color:#e6db74">&#34;(ä|ö|ü|ß)&#34;</span> | cut -d<span style="color:#e6db74">&#39;:&#39;</span> -f2 | sed -e <span style="color:#e6db74">&#34;s/ä/ae/g&#34;</span> -e <span style="color:#e6db74">&#34;s/ö/oe/g&#34;</span> -e <span style="color:#e6db74">&#34;s/ü/ue/g&#34;</span> -e <span style="color:#e6db74">&#34;s/ß/ss/g&#34;</span> &gt; /tmp/umlaut-urls-wordpress.txt</span></span></code></pre></div>

<h3 id="beide-dateien-vereinen" data-numberify>Beide Dateien vereinen<a class="anchor ms-1" href="#beide-dateien-vereinen"></a></h3>
<p>Jetzt kann man mit dem Shell Tool <code>paste</code> jede Zeile der einen Datei mit der selben Zeile der anderen Datei vereinen und als Trenner einen Doppelpunkt verwenden:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>paste -d<span style="color:#e6db74">&#39;:&#39;</span> umlaut-urls-wordpress.txt umlaut-urls-hugo.txt</span></span></code></pre></div></p>
<p>Das Ergebnis ist dann:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>mobilitaet:mobilität
</span></span><span style="display:flex;"><span>muell:müll
</span></span><span style="display:flex;"><span>muellsammeln:müllsammeln
</span></span><span style="display:flex;"><span>waelder:wälder
</span></span><span style="display:flex;"><span>landstrasse:landstraße
</span></span><span style="display:flex;"><span>fahrradanhaenger:fahrradanhänger
</span></span><span style="display:flex;"><span>ueberholen:überholen
</span></span><span style="display:flex;"><span>sonnenuntergaenge:sonnenuntergänge
</span></span><span style="display:flex;"><span>fruehling:frühling
</span></span><span style="display:flex;"><span>bussgeldstelle:bußgeldstelle
</span></span><span style="display:flex;"><span>[…]</span></span></code></pre></div></p>
<p>Links ist der String, wie er in WordPress verwendet wurde und rechts der von Hugo.</p>

<h3 id="konfiguration-für-nginx-erzeugen" data-numberify>Konfiguration für Nginx erzeugen<a class="anchor ms-1" href="#konfiguration-für-nginx-erzeugen"></a></h3>
<p>Diese Ausgabe wird nun mittels <code>sed</code> so abgewandelt, dass man direkt die Ausgabe bekommt, die man in die Nginx-Konfiguration eintragen kann. Und das automatisch für alle Tags mit Umlauten.</p>
<p>Der gewünschte für &ldquo;mobilität&rdquo; ist zum Beispiel:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rewrite ^/tags/mobilitaet(.*)$ /tags/mobilit_t$1 redirect;</span></span></code></pre></div></p>
<div class="shortcode-update">
<p>Update: Ich habe das Kommando angepasst, da die erste Version URLs von Blogbeiträgen zerstört hat, die den String eines Tags in der URL hatten, wie z. B. das Wort Frühling, für das es auch einen Tag gibt. Jetzt werden nur noch Tags erfasst.</p>
</div>

<p>Dies erreicht man mit diesem Kommando:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>paste -d&#39;:&#39; umlaut-urls-wordpress.txt umlaut-urls-hugo.txt | sed -E -e &#39;s_(.*):(.*)_rewrite ^/tags/\1(.*)$ /tags/\2$1 redirect;_g&#39;</span></span></code></pre></div></p>
<p><em>Anmerkung zu den Unterstrichen bei sed: Man kann als Trenner in sed fast beliebige Trennzeichen verwenden, solange sie innerhalb eines Ausdrucks immer gleich sind. Meist sieht man hier einen Schrägstrich.</em></p>
<p>Die Ausgabe ist:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rewrite ^/tags/mobilitaet(.*)$ /tags/mobilität$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/muell(.*)$ /tags/müll$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/muellsammeln(.*)$ /tags/müllsammeln$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/waelder(.*)$ /tags/wälder$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/landstrasse(.*)$ /tags/landstraße$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/fahrradanhaenger(.*)$ /tags/fahrradanhänger$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/ueberholen(.*)$ /tags/überholen$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/sonnenuntergaenge(.*)$ /tags/sonnenuntergänge$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/fruehling(.*)$ /tags/frühling$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/bussgeldstelle(.*)$ /tags/bußgeldstelle$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/kaelte(.*)$ /tags/kälte$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/mehrplatzfuersrad(.*)$ /tags/mehrplatzfürsrad$1 redirect;
</span></span><span style="display:flex;"><span>[…]</span></span></code></pre></div></p>

<h2 id="nginx-neustarten" data-numberify>Nginx neustarten<a class="anchor ms-1" href="#nginx-neustarten"></a></h2>
<p>Das kann man nun in Nginx eintragen und schon funktionieren alte Links wieder richtig :)</p>
<p>Vorher vielleicht noch testen mit:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nginx -t
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
</span></span><span style="display:flex;"><span>nginx: configuration file /etc/nginx/nginx.conf test is successful</span></span></code></pre></div></p>
<p>Und Nginx neustarten.</p>
<p>Fertig. Alle Tags und Kategorien werden nun von den alten URLs auf die neuen von Hugo weitergeleitet.</p>
]]></content:encoded><enclosure url="https://natenom.de/2022/02/weiterleitungen-wordpress-url-nach-hugo-url-mit-umlauten/cover.jpg" length="792539" type="image/jpeg"/></item><item><title>Umzug von WordPress zu Hugo – Teil 1 – Von den Gründen bis zum ersten funktionierenden Blog</title><link>https://natenom.de/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/</link><pubDate>Thu, 03 Feb 2022 07:30:33 +0100</pubDate><guid>https://natenom.de/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/</guid><description>Schon einige Male in den vergangenen Jahren habe ich versucht, meinen Blog von WordPress auf Hugo umzuziehen. Immer gab es dabei für mich unüberwindbare Hürden. Jetzt endlich hat es mal in einem neuen Anlauf funktioniert.
Hier berichte ich davon, wie genau ich das gemacht habe, was es zu bedenken galt und wie es im Ergebnis geworden ist. In erster Linie ist es für mich als Dokumentation gedacht, damit ich das in x Zeit noch nachvollziehen kann.</description><content:encoded><![CDATA[<p>Schon einige Male in den vergangenen Jahren habe ich versucht, meinen Blog von WordPress auf Hugo umzuziehen. Immer gab es dabei für mich unüberwindbare Hürden. Jetzt endlich hat es mal in einem neuen Anlauf funktioniert.</p>
<p>Hier berichte ich davon, wie genau ich das gemacht habe, was es zu bedenken galt und wie es im Ergebnis geworden ist. In erster Linie ist es für mich als Dokumentation gedacht, damit ich das in x Zeit noch nachvollziehen kann. Und wenn jemand anderes damit auch noch etwas anfangen kann, dann ist es noch besser.</p>
<p>Dabei schreibe ich übrigens das erste Mal einen Blogbeitrag mit einem einfachen Editor, offline, ohne Browser, in einem einfachen Textbearbeitungsprogramm. Und das fühlt sich gut an.</p>

<h2 id="wieso-überhaupt-weg-von-wordpress" data-numberify>Wieso überhaupt weg von WordPress?<a class="anchor ms-1" href="#wieso-überhaupt-weg-von-wordpress"></a></h2>
<p>Ich habe WordPress seit 2009 für meinen Blog benutzt und es immer auf eigenen Servern selbst gehostet. Ich war immer sehr zufrieden damit. WordPress hat es mir ermöglicht, mich immer nur auf den Inhalt konzentrieren zu können und hat mir die ganze Arbeit drumherum abgenommen. Und es ist immer noch so. Das schätze ich an dem Content Management System WordPress. Jedes Upgrade auf eine neue Version war immer fehlerfrei mit nur wenigen Klicks möglich.</p>
<p>Die meisten Funktionen von WordPress habe ich nie benutzt. Und mit dem Update auf den Gutenberg-Editor und jetzt kürzlich auf 5.9 mit dem Super Feature &ldquo;Full Site Editing&rdquo; ist noch klarer geworden, dass ich solch ein komplexes System nicht benötige. Es ist immer noch sehr einfach zu bedienen und zu aktualisieren, aber ich brauche es eben nicht.</p>
<p>Was ich brauche, ist eine einfache Möglichkeit, Texte zu schreiben, die Maus möglichst nicht bewegen zu müssen und außerdem benötige ich nur die grundlegensten Formatierungen. Kurzum das, was <a  class='urlextern'  href="https://daringfireball.net/projects/markdown/">Markdown</a> bietet.</p>
<p>Natürlich sind da noch andere Aspekte:</p>
<ul>
<li>Wartbarkeit: Webserver, PHP, Datenbank, alles will gepflegt werden und benötigt ab und zu Aufmerksamkeit. Mit Hugo kann man den kompletten Blog, der aus statischen Dateien (HTML, CSS, JavaScript) besteht, auf einen Webserver werfen und für immer dort liegen lassen.</li>
<li>Portierbarkeit/Backup: Sollte ich mal vom Rad fallen und nicht mehr aufstehen, kann man sich das Archiv herunterladen und hat weiterhin Zugriff auf die Inhalte des Blogs. Entsprechend wird man sich später das einmal alle x Zeit aktualisierte Archiv herunterladen können. Dazu später mehr.</li>
<li>Sicherheit: Da nichts dynamisch ausgeführt wird, gibt es auch keine Sicherheitslücken, die jemand ausnutzen könnte.</li>
<li>&ldquo;Einfachheit&rdquo;: Text-Editor, Hugo laufen lassen, hochladen per SFTP. Fertig.</li>
</ul>
<p></p><figure class="image-caption"><a href="/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-03-blog-im-texteditor-schreiben.png"><picture>
                <source type="image/webp" srcset="/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-03-blog-im-texteditor-schreiben_hu223b2f7dc1c2e1006a2b9545468f5ada_162917_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-03-blog-im-texteditor-schreiben_hu223b2f7dc1c2e1006a2b9545468f5ada_162917_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-03-blog-im-texteditor-schreiben_hu223b2f7dc1c2e1006a2b9545468f5ada_162917_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="Fenster eines Texteditors unter KDE/Plasma" srcset="/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-03-blog-im-texteditor-schreiben_hu223b2f7dc1c2e1006a2b9545468f5ada_162917_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-03-blog-im-texteditor-schreiben_hu223b2f7dc1c2e1006a2b9545468f5ada_162917_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-03-blog-im-texteditor-schreiben_hu223b2f7dc1c2e1006a2b9545468f5ada_162917_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-03-blog-im-texteditor-schreiben_hu223b2f7dc1c2e1006a2b9545468f5ada_162917_816x0_resize_q95_h2_catmullrom_3.webp" title="Fenster eines Texteditors unter KDE/Plasma" loading="lazy" width="816" height="523" /></picture></a><figcaption>Fenster eines Texteditors unter KDE/Plasma</figcaption></figure><p>
</p>

<h2 id="ein-schönes-theme-für-hugo-finden" data-numberify>Ein schönes Theme für Hugo finden<a class="anchor ms-1" href="#ein-schönes-theme-für-hugo-finden"></a></h2>
<p>Man kann natürlich auch selbst ein Theme bauen, aber das ist nichts für mich.</p>
<p>Eine Liste von aktuell 285 Themes gibt es auf der Webseite von Hugo, siehe <a  class='urlextern'  href="https://themes.gohugo.io/">hier</a>.</p>
<p>Ich habe mich für das Theme <a  class='urlextern'  href="https://themes.gohugo.io/themes/hugo-theme-bootstrap/">Bootstrap Theme for Personal Blog and Documentations</a> entschieden, weil es fast alles liefert, was ich benötige und vielfältige Einstellungsmöglichkeiten hat.</p>
<p>Was ich besonders mag:</p>
<ul>
<li>Dark Mode/Light Mode</li>
<li>Suchfunktion (<a  class='urlextern'  href="https://fusejs.io">fuse.js</a>)</li>
<li>Durch Ausblenden der Seitenliste kann der Inhaltsbereich breiter gemacht werden.</li>
<li>Es gibt bereits Shortcodes für Nachrichtenboxen (Info, Alarm, &hellip;). Siehe <a  class='urlextern'  href="https://hbs.razonyang.com/en/docs/shortcodes/alert/">hier</a>.</li>
<li><a  class='urlextern'  href="https://gohugo.io/templates/internal/#configure-twitter-cards">Twitter Cards</a> und <a  class='urlextern'  href="https://gohugo.io/templates/internal/#configure-open-graph">Open Graph</a></li>
<li>Responsive</li>
<li>optional mehrsprachig</li>
<li>Archivseiten</li>
<li>Shortcods für Verleinern von Bildern. Die verkleinerten Bilder werden beim Rendern von Hugo aus den Originaldateien erzeugt.</li>
<li>Lazy loading für Bilder</li>
<li>Inhaltsverzeichnis für Blogbeiträge</li>
<li>Keine Einbindung von externen Inhalten</li>
<li>Liste von &ldquo;ähnlichen Beiträgen&rdquo;</li>
</ul>

<h2 id="vor-dem-export-in-wordpress-aufräumen" data-numberify>Vor dem Export in WordPress aufräumen<a class="anchor ms-1" href="#vor-dem-export-in-wordpress-aufräumen"></a></h2>

<h3 id="tabellen-aufräumen" data-numberify>Tabellen aufräumen<a class="anchor ms-1" href="#tabellen-aufräumen"></a></h3>
<p>Vor dem Export der Daten kann man den Blog noch etwas aufräumen. Hat man z. B. wie ich über die Jahre viele verschiedene Plugins ausprobiert und wieder entfernt, dann könnten die Daten der Plugins immer noch irgendwo in den Tabellen der Datenbank liegen und beim Export in den Daten landen. Das wären alles zusätzliche Daten, die man nicht benötigt.</p>
<p>Dazu hatte ich mal einen eigenen Blogbeitrag verfasst, siehe <a  href="/2021/05/datenbank-von-wordpress-auch-mal-aufraeumen/">hier</a>.</p>

<h3 id="entwürfe" data-numberify>Entwürfe<a class="anchor ms-1" href="#entwürfe"></a></h3>
<p>Werden Entwürfe exportiert, dann erhalten diese in der exportierten Version kein Datum und sind somit erstmal aus dem Sichtbereich raus oder bekommen seltsame Namen/URLs zugewiesen wie z. B. &ldquo;?p=52696/&rdquo;, das der fortlaufenden ID von Blogbeiträgen entspricht. Das will man später alles nicht einzeln bearbeiten müssen. Deshalb Entwürfe löschen oder veröffentlichen.</p>

<h3 id="verlinkungen-in-wordpress" data-numberify>Verlinkungen in WordPress<a class="anchor ms-1" href="#verlinkungen-in-wordpress"></a></h3>
<p>Man kann in WordPress entweder die komplette URL verwenden (Standard), um auf einen Beitrag im eigenen Blog zu verlinken oder die ID des Beitrags verwenden.</p>
<p>Die komplette URL wäre z. B. &ldquo;natenom.de/2021/01/beitrag-ueber-den-kleinen-elefanten&rdquo; während die ID &ldquo;natenom.de/?p=12345&rdquo; wäre.</p>
<p>Solche Verlinkungen sollte man noch im laufenden WordPress Blog finden und in die erste Form (lange URL) überführen, da die zweite Form mit der ID in Hugo nicht funktionieren wird.</p>
<p>Dazu reicht die Suchfunktion im Adminpanel aus. Man sucht nach &ldquo;/?p=&rdquo;. In meinem Fall fanden sich ca. 130 solcher Beiträge mit ID Verlinkungen.</p>

<h2 id="optional-backup-des-blogs--für-hugo-nicht-relevant" data-numberify>(optional) Backup des Blogs – Für Hugo nicht relevant<a class="anchor ms-1" href="#optional-backup-des-blogs--für-hugo-nicht-relevant"></a></h2>
<p>Da der Blog am Ende abgeschaltet werden soll, habe ich ein letztes Mal Backups gemacht:</p>
<ul>
<li>Backup der WordPress Datenbank</li>
<li>Als Admin in WordPress angemeldet und unter Werkzeuge -&gt; Daten exportieren -&gt; Alle Inhalte ausgewählt und die xml-Datei heruntergeladen. In dieser Datei sind alle Beiträge, alle Seiten und auch die Kommentare von Benutzern enthalten. Nicht jedoch die hochgeladenen Dateien. In meinem Fall ist die Datei um 50 MiB groß und hat um die 50000 Zeilen.</li>
<li>Backup des kompletten WordPress-Verzeichnisses inklusive den hochgeladenen Dateien und dem ganzen PHP-Zeug</li>
<li>Herunterladen der kompletten Webseite mit wget, um später noch nachvollziehen zu können, unter welchen URLs was zu finden war. Für solche URLs, die Hugo nicht generiert. Die könnte man dann mit einem Webserver passend weiterleiten. Die Kommandozeile dafür ist:</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wget --recursive --domains<span style="color:#f92672">=</span>natenom.de --html-extension --page-requisites --convert-links --no-parent <span style="color:#e6db74">&#34;/&#34;</span> -R <span style="color:#e6db74">&#34;*xmlrpc*&#34;</span> --reject-regex <span style="color:#e6db74">&#34;.*wp-content.*&#34;</span></span></span></code></pre></div>
<div class="shortcode-notice update">
    <div class="shortcode-notice-title update">
        Update</div>
    <div class="notice-content"><p>Wenn es Probleme gibt und eine Meldung in der Form <code>no follow attribute found</code>, dann benötigt man zusätzlich noch diesen Parameter:</p>
<pre><code>-erobots=off
</code></pre>
</div>
</div>


<p>Das Verzeichnis <code>wp-content</code> habe ich bewusst ausgelassen, da es nur hochgeladene Dateien enthält (ca. 7 GiB), die bereits in einem anderen Backup enthalten sind.</p>
<p></p><figure class="image-caption"><a href="/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-01-backups-export-aller-daten-aus-wordpress.png"><picture>
                <source type="image/webp" srcset="/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-01-backups-export-aller-daten-aus-wordpress_hub4eed37399a08ef15104b74a01748fa5_75678_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-01-backups-export-aller-daten-aus-wordpress_hub4eed37399a08ef15104b74a01748fa5_75678_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-01-backups-export-aller-daten-aus-wordpress_hub4eed37399a08ef15104b74a01748fa5_75678_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-01-backups-export-aller-daten-aus-wordpress_hub4eed37399a08ef15104b74a01748fa5_75678_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-01-backups-export-aller-daten-aus-wordpress_hub4eed37399a08ef15104b74a01748fa5_75678_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-01-backups-export-aller-daten-aus-wordpress_hub4eed37399a08ef15104b74a01748fa5_75678_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/images/2022-02-01-backups-export-aller-daten-aus-wordpress_hub4eed37399a08ef15104b74a01748fa5_75678_816x0_resize_q95_h2_catmullrom_3.webp" title="Export Tool von WordPress. Exportiert alles außer der hochgeladenen Dateien." loading="lazy" width="816" height="430" /></picture></a><figcaption>Export Tool von WordPress. Exportiert alles außer der hochgeladenen Dateien.</figcaption></figure><p>
</p>

<h2 id="daten-für-hugo-aus-wordpress-exportieren" data-numberify>Daten für Hugo aus WordPress exportieren<a class="anchor ms-1" href="#daten-für-hugo-aus-wordpress-exportieren"></a></h2>
<p>Mit dem Tool <a  class='urlextern'  href="https://github.com/SchumacherFM/wordpress-to-hugo-exporter">WordPress to Hugo Exporter</a> kann man alle Seiten und Beiträg eines Blogs in eine Zip-Datei exportieren.</p>
<p>Ich gehe hier nicht darauf ein, wie man das Tool verwendet, da das ausreichend gut auf dessen Webseite erklärt ist. Wichtig ist hier nur, dass man am Ende eine Datei erhält, hier im Beispiel mit dem Namen wpexport.zip.</p>
<p>Auf der Projektseite steht, was man an der PHP-Datei anpassen muss, damit auch Kommentare exportiert werden.</p>
<p>Der Export kann eine ganze Weile dauern und sollte deshalb auf der Kommandozeile ausgeführt werden. Die <code>wpexport.zip</code> meines Blogs hatte eine Dateigröße von etwas mehr als 7 GiB.</p>
<p>Die Datei <code>wpexport.zip</code> hat diese Struktur:</p>
<pre tabindex="0"><code>seite-a/index.md
seite-b/index.md
irgendeine-seite/index.md
posts/
    2022-01-05-mein-beitrag-im-januar
    2022-01-06-mein-beitrag-ueber-bluemeleinchen
    2022-02-08-ein-neuer-beitrag-mit-tollen-fahrraedern
wp-content/
    uploads/
        2022/
            01/
                2022-01-04-hochgeladenes-bild-1.jpg
                2022-01-04-hochgeladenes-bild-2.jpg
config.yaml
</code></pre><ul>
<li>Es sind alle &ldquo;Seiten&rdquo; des Blogs als Verzeichnisse enthalten, in den index.md-Dateien sind die Inhalte.</li>
<li>Die &ldquo;Beiträge&rdquo; (Englisch &ldquo;Posts&rdquo;) liegen als md-Dateien im Verzeichnis &ldquo;posts&rdquo;.</li>
<li>Die hochgeladenen Dateien wie Fotos, Screenshots oder auch Audio und Video liegen im Verzeichnis wp-content/uploads, sortiert nach Jahr und Monat.</li>
<li>Dann gibt es noch die Datei config.yaml, welche die URL des Blogs enthält, den Namen und die Beschreibung.</li>
</ul>
<p>Die Daten lädt man dann auf den eigenen PC herunter.</p>

<h2 id="eine-webseite-mit-hugo-anlegen-und-theme-einfügen" data-numberify>Eine Webseite mit Hugo anlegen und Theme einfügen<a class="anchor ms-1" href="#eine-webseite-mit-hugo-anlegen-und-theme-einfügen"></a></h2>
<p>Ich will hier nicht darauf eingehen, wie man eine Webseite mit Hugo anlegt und das Theme einfügt, das ist auf der Projektseite bereits ausführlich gut dokumentiert, siehe <a  class='urlextern'  href="https://gohugo.io/getting-started/quick-start/">hier</a>.</p>
<p>Sobald das erledigt und das Theme eingebunden ist, kann man die exportierten Daten aus dem heruntergeladenen Archiv entpacken und die Daten in das Verzeichnis des neuen Blogs hineinkopieren:</p>
<ul>
<li>Die Datei <code>config.yaml</code> habe ich weg gelassen.</li>
<li>Das Verzeichnis <code>posts</code> wird nach <code>content</code> kopiert.</li>
<li>Das Verzeichnisse <code>seite-x</code> werden nach <code>content/pages</code> kopiert.</li>
<li>Das Verzeichnis <code>wp-content</code> wird nach <code>static</code> kopiert.</li>
</ul>

<h2 id="ein-bisschen-konfiguration" data-numberify>Ein bisschen Konfiguration<a class="anchor ms-1" href="#ein-bisschen-konfiguration"></a></h2>
<p>Eine Liste aller Einstellungsmöglichkeiten gibt es auf der <a  class='urlextern'  href="https://hbs.razonyang.com/v0/en/docs/configuration/">Seite des Theme-Entwicklers</a>.</p>

<h3 id="taxonomie" data-numberify>Taxonomie<a class="anchor ms-1" href="#taxonomie"></a></h3>
<p>Bei der Taxonomie wollte ich die URLs von WordPress möglichst erhalten.</p>
<p>Per Voreinstellung verwendet Hugo für tags in der URL &ldquo;tags&rdquo;, WordPress jedoch &ldquo;tag&rdquo;. Bei Kategorien verwendet Hugo &ldquo;categories&rdquo; und WordPress &ldquo;category&rdquo;.</p>
<p>Das kann man in der <code>config.toml</code> anpassen mit:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[<span style="color:#a6e22e">taxonomies</span>]
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">category</span> = <span style="color:#e6db74">&#39;category&#39;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">tag</span> = <span style="color:#e6db74">&#39;tag&#39;</span></span></span></code></pre></div>
<p>In meinem ausgewählten Theme funktioniert das jedoch leider nicht, da zwingend &ldquo;tags&rdquo; und &ldquo;categories&rdquo; notwendig sind. Kann man sicher anpassen, ich aber nicht. Also bleibt es bei den Voreinstellungen. Ich werde es dann einfach mit dem Webserver weiterleiten lassen.</p>
<p>In Nginx z. B. mit:</p>
<pre tabindex="0"><code>rewrite ^/tag/(.*)$ /tags/$1 redirect;
rewrite ^/category/(.*)$ /categories/$1 redirect;
</code></pre><p>Wenn das gut funktioniert, kann man das später auf <em>permanent</em> umschreiben.</p>

<h3 id="beiträge-nicht-gelistet" data-numberify>Beiträge nicht gelistet<a class="anchor ms-1" href="#beiträge-nicht-gelistet"></a></h3>
<p>Auf der Startseite des Blogs wurden die Beiträge nicht gelistet. Mit Herumprobieren konnte ich herausfinden, dass das an dem Eintrag &ldquo;type: post&rdquo; im Front Matter (Metadaten eines Beitrags) lag. Daher habe ich mit dem folgenden Shell-Aufruf diese Zeile in allen md-Dateien gelöscht:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sed -i <span style="color:#e6db74">&#34;/^type: post</span>$<span style="color:#e6db74">/d&#34;</span> *.md</span></span></code></pre></div>

<h3 id="sonstige-konfiguration" data-numberify>Sonstige Konfiguration<a class="anchor ms-1" href="#sonstige-konfiguration"></a></h3>
<p>Hier noch ein paar weitere wichtige Dinge, die ich in der Konfiguration eingestellt habe.
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[<span style="color:#960050;background-color:#1e0010">…</span>]
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">baseURL</span> = <span style="color:#e6db74">&#34;/&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">rssLimit</span> = <span style="color:#ae81ff">15</span>
</span></span><span style="display:flex;"><span>[<span style="color:#960050;background-color:#1e0010">…</span>]
</span></span><span style="display:flex;"><span>[<span style="color:#a6e22e">params</span>]
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">comment</span> = <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">breadcrumb</span> = <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">palette</span> = <span style="color:#e6db74">&#34;blue&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">dateFormat</span> = <span style="color:#e6db74">&#34;Mon, 02 Jan 2006 15:04&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">mainSections</span> = [<span style="color:#e6db74">&#34;posts&#34;</span>, <span style="color:#e6db74">&#34;pages&#34;</span> ]
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">poweredBy</span> = <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">math</span> = <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">diagram</span> = <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">logo</span> = <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">description</span> = <span style="color:#e6db74">&#34; Verkehrswende, Fahrrad, CriticalMass, OpenBikeSensor, SimRa, Mumble, Open Source, Minimalist, OpenStreetMap, Müllsammeln&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">recentPostCount</span> = <span style="color:#ae81ff">5</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">relatedPostCount</span> = <span style="color:#ae81ff">6</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">categoryCount</span> = <span style="color:#ae81ff">200</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">tagCount</span> = <span style="color:#ae81ff">150</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">searchBar</span> = <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">post</span>.<span style="color:#a6e22e">copyright</span> = <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">search</span>.<span style="color:#a6e22e">fuse</span>.<span style="color:#a6e22e">threshold</span> = <span style="color:#ae81ff">0.0</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">countTaxonomyPosts</span> = <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">post</span>.<span style="color:#a6e22e">excerpt</span> = <span style="color:#e6db74">&#34;description&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">viewer</span> = <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">showShare</span> = <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">socialShare</span> = <span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>[<span style="color:#a6e22e">outputs</span>]
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">home</span> = [<span style="color:#e6db74">&#34;HTML&#34;</span>, <span style="color:#e6db74">&#34;RSS&#34;</span>, <span style="color:#e6db74">&#34;JSON&#34;</span>]</span></span></code></pre></div></p>

<h2 id="von-absoluten-urls-zu-relativen-urls" data-numberify>Von absoluten URLs zu relativen URLs<a class="anchor ms-1" href="#von-absoluten-urls-zu-relativen-urls"></a></h2>
<p>Ich habe keine Ahnung von SEO und habe mich nie damit beschäftigt. Könnte es sein, dass WordPress aus SEO-Gründen absoulte URLs verwendet und nicht realtive? Ich habe dazu die Info auf einer Webseite gefunden, dass relative Links problematisch werden könnten, wenn der Server nicht richtig eingerichtet sei.</p>
<p>Hat man Bedenken, dann weiter zum nächsten Abschnitt.</p>
<p>Aber: Will man den neuen Blog auf dem eigenen PC anschauen, benötigt man ohne die Veränderungen der URLs eine Internetverbindung, damit eingebettete Inhalte wie z. B. Bilder vom Browser von der ursprünglichen Webseite heruntergeladen werden können. Oder aber man biegt das DNS temporär um, muss dann aber zumindest aus https http machen, und so weiter.</p>

<h3 id="absolute-urls-auf-hochgeladene-dateien" data-numberify>Absolute URLs auf hochgeladene Dateien<a class="anchor ms-1" href="#absolute-urls-auf-hochgeladene-dateien"></a></h3>
<p>Alle Verlinkungen auf Fotos, Bilder und Videos sind in WordPress mit der absoulten URL angegeben, in meinem Fall mit <code>natenom.de/wp-content/uploads/...</code>. Und das wird so auch in die md-Dateien exportiert.</p>
<p>Deshalb kann man die URLs mit dem Streameditor sed umschreiben lassen:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sed -i -E -e <span style="color:#e6db74">&#39;s#/wp-content/uploads/#/wp-content/uploads/#g&#39;</span> *.md</span></span></code></pre></div>
<p>(Ich habe das aktuell erstmal noch nicht getan.)</p>
<p>Das Kommando führt man in allen Verzeichnissen aus, in denen md-Dateien liegen. Man könnte das auch so umschreiben, dass es ausgehend vom neuen Blogverzeichnis alle md-Dateien findet und so alle erfasst. Aber so reicht es mir.</p>

<h3 id="absolute-urls-auf-blogbeiträge" data-numberify>Absolute URLs auf Blogbeiträge<a class="anchor ms-1" href="#absolute-urls-auf-blogbeiträge"></a></h3>
<p>Das selbe gilt auch für Verlinkungen im Blogbeiträgen auf andere Beiträg im eigenen Blog. Auch diese URLs lasse ich umschreiben:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sed -i -E -e <span style="color:#e6db74">&#39;s#/#/#g&#39;</span> *.md</span></span></code></pre></div>
<p>(Ich habe das aktuell erstmal noch nicht getan.)</p>
<p>Aus dem absoulten Link <code>/</code> wird dadurch <code>/</code>.</p>

<h2 id="umlaute-in-urls-von-kategorien-und-tags" data-numberify>Umlaute in URLs von Kategorien und Tags<a class="anchor ms-1" href="#umlaute-in-urls-von-kategorien-und-tags"></a></h2>
<p>Ich verwende im Blog das Tag &ldquo;Müllsammeln&rdquo; und die Kategorie &ldquo;Mobilität&rdquo;. Wordpress hat dabei automatisch die Umlaute in den dafür genutzten URLs in die alternativen Schreibweisen &ldquo;muellsammeln&rdquo; und &ldquo;mobilitaet&rdquo; umgewandelt. Hugo macht das nicht, weshalb dort das Tag auch &ldquo;müllsammeln&rdquo; lautet.</p>
<p>Es gibt mehrere Lösungen:</p>
<ol>
<li>Es dabei belassen, denn mittlerweile sind diese Zeichen kein Problem mehr. Es sieht nur nicht sonderlich schön aus, wenn man statt <strong>mobilität</strong> das hier sieht <strong>mobilit%C3%A4t</strong></li>
<li>Ohne Veränderungen an den Beiträgen wäre die Option <strong>removePathAccents</strong> von Hugo möglich, die aus &ldquo;mobilität&rdquo; &ldquo;mobilitat&rdquo; macht.</li>
<li>Hugo selbst zu verändern, <a  class='urlextern'  href="https://www.von-laufenberg.de/blog/it/hugo-umlaute/">siehe hier</a>.</li>
<li>Alle Vorkommen der Tags in den Beiträgen mit sed umschreiben und ö durch oe ersetzen usw.</li>
<li>Weiterleitungen durch den Webserver, siehe unten.</li>
</ol>
<p>Einen Issue mit vielen Informationen zu diesem Theme gibt es auf Github, <a  class='urlextern'  href="https://github.com/gohugoio/hugo/issues/3476">siehe hier</a>. Ein weitere Issue zu dem Thema ist seit November 2021 noch offen, <a  class='urlextern'  href="https://github.com/gohugoio/hugo/issues/9134">siehe hier</a>.</p>
<p>Ich habe mich entschieden, das so zu belassen das erst einmal mit Weiterleitungen zu &ldquo;fixen&rdquo; und zu schauen, was sich bei dem Issue tut.</p>
<p>In Nginx sind diese:</p>
<pre tabindex="0"><code>rewrite ^/tag/muellsammeln/(.*)$ /tags/müllsammeln/$1 redirect;
rewrite ^/category/mobilitaet/(.*)$ /categories/mobilität/$1 redirect;
rewrite ^/tag/(.*)$ /tags/$1 redirect;
rewrite ^/category/(.*)$ /categories/$1 redirect;
</code></pre><p>Ich nutze bei solchen Dingen am Anfang immer erst redirect, was dem HTTP Status 302 entspricht und ändere das dann irgendwann zu permanent (Status 301) um.</p>

<h2 id="fehlerseite-für-404" data-numberify>Fehlerseite für 404<a class="anchor ms-1" href="#fehlerseite-für-404"></a></h2>
<p>Falls doch mal eine Seite nicht gefunden wird, habe ich die <code>404.html</code> in Nginx eingerichtet:</p>
<pre tabindex="0"><code>error_page 404 /404.html;
</code></pre><p>Hier kann man die Seite mal ansehen: <a  href="/blabla-diese-seite-gibt-es-nicht">Dieser Link zeigt auf eine nicht vorhandene Seite</a>.</p>

<h2 id="damit-erstmal-keine-inhalte-fehlen" data-numberify>Damit erstmal keine Inhalte fehlen<a class="anchor ms-1" href="#damit-erstmal-keine-inhalte-fehlen"></a></h2>
<p>Würde man jetzt schon Hugo starten, würden vermutlich viele Inhalte in verschiedenen Beiträgen fehlen. Das liegt daran, dass das oben genannte Export-Tool viele HTML Tags nicht in Markdown konvertieren kann und dann an diesen Stellen den HTML-Quelltext in die exportierten md-Dateien schreibt. Doch Hugo filtert diesen HTML-Quelltext beim Rendern der Website heraus.</p>
<p>Damit ich nicht erst alle 2560 Blogbeiträge manuell überprüfen und korrigieren muss, bevor ich den neuen Blog öffentlich machen kann, habe ich mich entschieden, dieses Verhalten von Hugo umzustellen und Hugo anzuweisen, den HTML-Quelltext nicht herauszufiltern. Das ist zwar nicht im Sinne des Erfinders aber so habe ich die Möglichkeit, die Arbeit auf <em>irgendwann</em> später zu verschieben.</p>
<p>Details dazu findet man <a  class='urlextern'  href="https://gohugo.io/news/0.60.0-relnotes/">hier</a>. Suche nach <code>unsafe</code>.</p>
<p>In die config.toml fügt man dazu Folgendes ein:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[<span style="color:#a6e22e">markup</span>]
</span></span><span style="display:flex;"><span>  [<span style="color:#a6e22e">markup</span>.<span style="color:#a6e22e">goldmark</span>]
</span></span><span style="display:flex;"><span>    [<span style="color:#a6e22e">markup</span>.<span style="color:#a6e22e">goldmark</span>.<span style="color:#a6e22e">renderer</span>]
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">unsafe</span> = <span style="color:#66d9ef">true</span></span></span></code></pre></div>

<h2 id="run-hugo-run" data-numberify>Run Hugo, Run<a class="anchor ms-1" href="#run-hugo-run"></a></h2>
<p>Jetzt kann man Hugo veranlassen, den neuen Blog das erste Mal zu rendern und dann lokal zur Verfügung zu stellen. Per Voreinstellung ist er unter localhost:1313 erreichbar.</p>
<p>Dazu wechselt man auf der Kommandozeile in das Verzeichnis des neuen Blogs und führt aus:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>hugo server --renderToDisk -D -E -F -v</span></span></code></pre></div>
<p>Jetzt werden alle gerenderten Dateien und auch die aus dem <code>static</code>-Verzeichnis in das Verzeichnis <code>public</code> kopiert, welches Hugo automatisch erstellt, wenn es noch nicht existiert.</p>
<p>Sobald alles bereit ist, gibt es eine Meldung wie etwa:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>                   |  DE   
</span></span><span style="display:flex;"><span>-------------------+-------
</span></span><span style="display:flex;"><span>  Pages            | <span style="color:#ae81ff">4350</span>  
</span></span><span style="display:flex;"><span>  Paginator pages  | <span style="color:#ae81ff">1694</span>  
</span></span><span style="display:flex;"><span>  Non-page files   |    <span style="color:#ae81ff">1</span>  
</span></span><span style="display:flex;"><span>  Static files     |   <span style="color:#ae81ff">88</span>  
</span></span><span style="display:flex;"><span>  Processed images |    <span style="color:#ae81ff">0</span>  
</span></span><span style="display:flex;"><span>  Aliases          |  <span style="color:#ae81ff">889</span>  
</span></span><span style="display:flex;"><span>  Sitemaps         |    <span style="color:#ae81ff">1</span>  
</span></span><span style="display:flex;"><span>  Cleaned          |    <span style="color:#ae81ff">0</span>  
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Built in <span style="color:#ae81ff">45228</span> ms
</span></span><span style="display:flex;"><span>Watching <span style="color:#66d9ef">for</span> changes in /home/natenom-web-hugo/<span style="color:#f92672">{</span>assets,content,layouts,static,themes<span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>Watching <span style="color:#66d9ef">for</span> config changes in /home/natenom-web-hugo/config.toml, <span style="color:#f92672">[</span>…<span style="color:#f92672">]</span>
</span></span><span style="display:flex;"><span>Environment: <span style="color:#e6db74">&#34;development&#34;</span>
</span></span><span style="display:flex;"><span>Serving pages from /home/natenom-web-hugo/public
</span></span><span style="display:flex;"><span>Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
</span></span><span style="display:flex;"><span>Web Server is available at http://localhost:1313/ <span style="color:#f92672">(</span>bind address 127.0.0.1<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>Press Ctrl+C to stop</span></span></code></pre></div>

<h2 id="erstmal-fertig" data-numberify>Erstmal fertig<a class="anchor ms-1" href="#erstmal-fertig"></a></h2>
<p>Das reicht dann auch wieder für diesen Beitrag. Man kann jetzt schon im eigenen Blog offline umgucken und wird hier und da noch unschöne Dinge finden, wie falsch dargestellte Bilder.</p>
<p>In <a  href="/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-2">Teil 2</a> geht es darum, für die Übergangszeit das übrig gebliebene HTML, das nicht zu Markdown konvertiert werden konnte, automatisiert so zu verändern, dass der Blog trotzdem ansehnlich ist, wenn auch noch nicht perfekt.</p>
]]></content:encoded><enclosure url="https://natenom.de/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/cover.png" length="162917" type="image/png"/></item></channel></rss>