Saubere URLs und NGINX-Update
Die Website sollte in der Adressleiste aufgeräumter wirken: /blog statt /blog.html, /projects statt /projects.html und kurze Blog-Slugs statt langer Dateinamen.
Ausgangspunkt
Bisher zeigte die Navigation auf Dateien wie /projects.html und /blog.html. Für eine statische Website ist das normal, aber als öffentliche URL wollte ich lieber kürzere und ruhigere Pfade.
Ziel war deshalb: Die Dateien bleiben einfache HTML-Dateien, aber Besucher sehen saubere Pfade.
/about.html -> /about
/projects.html -> /projects
/blog.html -> /blog
/blog/mobile.html -> /blog/mobile
Links auf saubere Pfade
Zuerst habe ich die internen Links in den HTML-Dateien geändert. Aus Links auf konkrete Dateien wurden Links auf die später sichtbaren Pfade.
<a href="/blog">Blog</a>
<a href="/projects">Projects</a>
NGINX Routing
Danach musste NGINX diese sauberen Pfade intern wieder auf die passenden Dateien abbilden. Die entscheidende Regel ist try_files: Für diese Website soll /blog zuerst als blog.html versucht werden, bevor NGINX einen gleichnamigen Ordner betrachtet.
location = / {
try_files /index.html =404;
}
location = /index.html {
return 301 /;
}
location ~ ^(.+)\.html$ {
return 301 $1;
}
location / {
try_files $uri.html $uri $uri/ =404;
}
Der eigene Block für / ist wichtig. Ohne ihn kann ein Redirect-Loop entstehen, weil / intern auf index.html fällt und /index.html wiederum zurück auf / umgeleitet wird.
sudo nginx -t
sudo systemctl reload nginx
Tests mit curl
Nach der Änderung habe ich nicht nur im Browser getestet, sondern die wichtigsten URLs direkt mit curl -I geprüft. So sieht man schnell, ob eine URL direkt ausgeliefert oder weitergeleitet wird.
curl -I https://newwaves.dev/
curl -I https://newwaves.dev/index.html
curl -I https://newwaves.dev/blog
curl -I https://newwaves.dev/blog.html
curl -I https://newwaves.dev/projects
/liefert die Landingpage mit200 OK./index.htmlleitet mit301auf/weiter./blogund/projectsliefern direkt200 OK./blog.htmlund/projects.htmlleiten auf die sauberen URLs weiter.
Kürzere Blog-Slugs
Danach habe ich auch die Blogbeiträge selbst auf kürzere Slugs umgestellt. Die sichtbaren URLs sind dadurch knapper, ohne dass die Website ihr statisches Grundprinzip verliert.
/blog/mobile
/blog/start
/blog/struktur
/blog/fastfetch
/blog/git-deploy
/blog/vps-security
/blog/git-worktrees
/blog/redesign
Für die Umbenennung habe ich git mv benutzt. Das ist wie Umbenennen im Dateisystem, nur so, dass Git die Änderung sauber als Rename erkennt.
git mv blog/mobile-optimierung.html blog/mobile.html
Auslöser: NGINX prüfen
Der Anstoß für die Arbeit kam durch einen Hinweis auf X zu einer NGINX-Sicherheitslücke. Das war nicht der Hauptteil der Änderung, aber ein guter Anlass, den Webserver und die Website-Auslieferung direkt zusammen zu prüfen.
Der erste Schritt war nicht, blind irgendetwas zu ändern, sondern die installierte NGINX-Version und den Ubuntu-Paketstand zu prüfen.
nginx -v
nginx -V 2>&1 | head -1
apt list --installed 'nginx*'
Auf dem VPS war zuerst nginx 1.24.0-2ubuntu7.7 installiert. Nach sudo apt update war ein Security-Update auf 1.24.0-2ubuntu7.8 verfügbar.
Update einspielen
Weil Ubuntu Sicherheitsfixes oft in die vorhandene Paketversion zurückportiert, ist nicht nur die sichtbare Upstream-Version wie 1.24.0 wichtig. Entscheidend ist die komplette Paketversion aus den Ubuntu-Repositories.
sudo apt update
sudo apt install --only-upgrade nginx nginx-common
sudo nginx -t
sudo systemctl reload nginx
Danach war NGINX auf 1.24.0-2ubuntu7.8. Der Konfigurationstest war erfolgreich und der Reload lief ohne Fehler.
apt list --installed 'nginx*'
sudo nginx -t
Deploy
Die Website-Dateien ändere ich lokal, committe sie und pushe sie nach GitHub. Auf dem VPS wird danach nur noch der neue Stand gezogen.
git status
git add .
git commit -m "Use clean URLs for site navigation"
git push
cd /var/www/newwaves.dev
git status
git pull
Fazit
Die Änderung ist klein, aber sie macht die Website spürbar sauberer: Die Struktur bleibt statisch und nachvollziehbar, während die sichtbaren URLs besser zur Seite passen. Der NGINX-Check war am Ende der passende Anlass, Routing, Slugs und Serverstand gemeinsam zu prüfen.