Verwirrter: Indirekte Pfadangaben in CSS

Guten Abend!

Im Rootverzeichnis einer Domain befindet sich eine Indexseite plus eine .htaccess Datei sowie die Ordner "stylesheets" und "fonts".

In einem CSS befindet sich unter Anderem die Einbindung einer Schriftart:

@font-face
	{
		font-family : 'foo';
		src         : url('../fonts/foo.woff') format('woff'),
		              url('../fonts/foo.woff2') format('woff2');
		font-style  : normal;
		font-weight : normal;
	}

Wird nun auf der Indexseite ein Element mit font-family : 'foo' angesprochen, dann wird dieses auch wie erwartet mit der gewählten eigenen Schriftart ausgegeben.

Rufe ich aber das CSS mit einer in der .htaccess stehenden Kurz-URL (Rewrite Engine) auf, dann wird die Datei zwar gefunden und alles darin stehende getan, nur die Schriftart wird nicht mehr ausgegeben, so, als stünde das gar nicht da.

Offenbar greift also die URL Angabe nicht mehr. Ändere ich diese in einen absoluten URL-Pfad, funktioniert die Sache wieder. Nun möchte ich aber keine komplette URL dort stehen haben, sondern eine indirekte Pfadangabe.

Was habe ich da zu verändern? Oder funktioniert das technisch nicht und ich muss mich entscheiden zwischen keinem URL Rewriting der CSS Adresse und dafür dort dann die indirekte Pfadangebe und URL Rewriting mit einer kompletten URL Angabe für die Schriftdatei im CSS?

Bitte helft mir!

Vielen Dank

Ein Verwirrter

  1. Hallo Verwirrter,

    das Umsetzen relativer URLs in absolute URLs findet im Browser statt. D.h. wenn Du am Server rewritest, bekommt der Browser das nicht mit.

    Wenn also das CSS nicht mehr aus dem stylesheets-Ordner geholt wird, sondern durch rewriting an einer anderen Position aufscheint, dann gerät der Browser in Verwirrung.

    Du musst aber keine vollständige URL angeben.

    Wenn Du die Seite von www.example.com/foo/index.html lädst, und fonts ein Unterordner von foo ist, dann kannst Du im Stylesheet den Font mit url('/foo/fonts/foo.woff') ansprechen. Das ist immer noch absolut, aber immerhin ohne die Domain. Oder Du musst auch für die Fonts ein rewrite-Kürzel vorsehen und über das Kürzel adressieren.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Danke für den Hinweis, Rolf! Das hat etwas weitergeholfen!

      1. url('../fonts/foo.woff') format('woff'),
        

        Wobei ich mich frage, warum nicht einfach der Ordner /fonts/ im ServerRoot existieren sollte.

        Für irgendwelche merkwürdigen, eingebundenen Libs könnte man dann tatsächlich rewriten:

        rewrite_rule ".*/fonts/(.*)$"  "/fonts/$1" [L]
        

        Und für die Dateisystemstruktur könnte man per Shellskript verlinken:

        ln /var/www/example.com/lib/interior/fonts/* /var/www/example.com/fonts/
        

        Freilich bliebe als allerletzte Möglichkeit auch noch, 404er Fehler (Not Found) durch etwas wie ein PHP-Skript abzufangen und darin zu untersuchen, was man denn mit welchem Statuscode auszuliefern gedenke…