Glob Pattern, das auf alle Pfade außer die Root-URL matcht

CoMo

Commander
Registriert
Dez. 2015
Beiträge
2.175
Hi,

ich stelle mich hier gerade offenbar zu dämlich an.

Ich möchte, dass immer auf die index.html unter / redirected wird, egal welcher Pfad im Browser eingegeben wird.

Der Server erwartet dafür ein Glob Pattern, doch egal, wie ich es anstelle, entweder geht es im Kreis, weil / auf / umleitet oder die Redirection funktioniert gar nicht und ich bekomme bei Pfadangaben ein 404.

Mein Versuch jetzt gerade:


Code:
[[advanced.redirects]]
source = "/*(*)"
destination = "/"
kind = 301

Ergebnis 404. Wie muss es richtig aussehen?
 
CoMo schrieb:
Ich möchte, dass immer auf die index.html unter / redirected wird, egal welcher Pfad im Browser eingegeben wird.
Das ist schon mal etwas zu kurz gedacht. Denn wenn alles auf die index.html redirected wird, dann werden auch Subrequests für css, jpg, js und andere notwendige Dateien dahin redirected und funktionieren somit nicht.

Unter Apache kann man das so machen, dass, sofern eine angeforderte URL nicht vorhanden ist (404), eine Standard-URL aufgerufen wird. Bei deinem Hoster scheint das mit Error-Pages zu gehen - konkreter mit Fallback-Pages.

Ich würde es also so machen, dass du einfach als Fallback-Page deine index.html angibst und vielleicht als Error-Page eine index.html?error=404, dann könntest du mit einem kleinen JavaScript den Inhalt anpassen und den Fehler anzeigen.
 
Static Web Server Doku: https://static-web-server.net/features/url-redirects/#source

Source


The source is a Glob pattern that should match against the URI that is requesting a resource file.


The glob pattern functionality is powered by the globset crate which supports Standard Unix-style glob syntax.

globset Doku: https://docs.rs/globset/latest/globset/#syntax
  • ? matches any single character. (If the literal_separator option is enabled, then ? can never match a path separator.)
  • * matches zero or more characters. (If the literal_separator option is enabled, then * can never match a path separator.)
  • ** recursively matches directories but are only legal in three situations. [...]

Also müsste sowas wie source = "?*" sein. Die runden Klammern haben keine spezielle Bedeutung und matchen nur tatsächliche ( bzw. ).
 
Da gibt es nichts, was "funktionieren" muss. Der Webserver soll nichts weiter als eine leere Seite anzeigen. Immer.

Das HTML sieht so aus:

Code:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
</body>
</html>
 
Und wozu soll das gut sein dem Client immer 200 OK mit einem "leeren" HTML Dokument vorzulügen? 404 Not Found ist doch semantisch korrekt. Es käme auch noch 204 No Content in Frage.
 
Hab den Slash verschusselt, es müsste source = "/?*" sein. Ansonsten matched das ? ja den / weg wodurch ?* auch / selbst matched.
 
  • Gefällt mir
Reaktionen: CoMo
Marco01_809 schrieb:
Hab den Slash verschusselt, es müsste source = "/?*" sein.

Vielen Dank, das funktioniert 😊

Marco01_809 schrieb:
Und wozu soll das gut sein dem Client immer 200 OK mit einem "leeren" HTML Dokument vorzulügen? 404 Not Found ist doch semantisch korrekt. Es käme auch noch 204 No Content in Frage.

Im Moment soll mein AdGuard alle geblockten Domains an den Webserver weiterleiten, statt mit Null IP zu antworten. Aber 204 No Content wäre auch eine Idee, die ich mal in Erwägung ziehen werde. Auch danke für den Tipp!
 
Zurück
Oben