Verkürzung der Upload-Pfade

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Verkürzung der Upload-Pfade

Beitrag von bodil » Di 14. Apr 2020, 16:18

Hallo zusammen!
Die Länge des Quellcodes zu reduzieren liegt gerade voll im Trend. Mir fiel auf, dass viele Bilder mit einem Pfad eingebunden werden, der so aussieht:

Code: Alles auswählen

"https://meineDomain.de/cms/upload/..."
Unabhängig von der Frage, wo solche Pfade herkommen, dachte ich, ich könnte sie kürzen, in dem ich sie in der passenden Chain (Contenido.Frontend.HTMLCodeOutput) durch

Code: Alles auswählen

"upload/..."
ersetze, schließlich nutzt die Seite ein Base-Tag im Head:

Code: Alles auswählen

<base href="https://meineDomain.de/cms/">
Nach Abarbeiten der Chain baut irgendwas die Pfade aber um, so dass sie wieder so aussehen (und so lang sind) wie vorher. Weiß jemand warum?
(Die Seite nutzt Contenido 4.10.0.)
Besten Dank und bleibt gesund!
Bodil

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Verkürzung der Upload-Pfade

Beitrag von xmurrix » Mi 15. Apr 2020, 22:51

Hallo bodil,

alle URL's, die mit "upload" beginnen, werden in der Funktiom mr_buildGeneratedCode() (siehe contenido/plugins/mod_rewrite/includes/functions.mod_rewrite.php) gegen eine vollständige URL ersetzt.

Der Grund dafür ist zum einen der IE 8/9, der Probleme mit der base href hat. Zum anderen funktionieren URLs nicht, wenn die mit "upload" beginnen, aber kein base href ausgegeben wird.

Am Besten ist es, wenn wir dieses Verhalten für die nächste Version von CONTENIDO konfigurierbar zu machen.

Du kannst aber die Zeilen in der Funktion mr_buildGeneratedCode() auskommentieren. Ein anderer Trick wäre hier die Ausgabe von URL's, die nicht mit "upload" beginnen sondern, z. B. mit "upl". Das wird dann in der AMR-Funktion nicht umgewandelt, dafür kann man dann in der .htaccess Anfragen, die mit "upl" beginnen, in "upload" umschreiben.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Verkürzung der Upload-Pfade

Beitrag von bodil » Do 16. Apr 2020, 13:48

Hi xmurrix!
Vielen Dank! Das hat mir viel Sucherei erspart!
Ich glaube nicht, dass noch viele IE 8 oder 9 unterwegs sind oder dass sonst jemand noch Rücksicht auf sie nimmt. Trotzdem habe ich mich entschieden, sie zu berücksichtigen.
Ich habe contenido/plugins/mod_rewrite/includes/functions.mod_rewrite.php (ab ca. Zeile 494) so geändert:
vorher:

Code: Alles auswählen

		// CON-1389 modifier /e is deprecated as of PHP 5.5
		$code = preg_replace_callback("/([\"|\'|=])upload\/(.?|.+?)([\"|\'|>])/i", function($match) use ($baseUri) {
            return stripslashes($match[1] . $baseUri . 'upload/' . $match[2] . $match[3]);
        }, $code);
nachher:

Code: Alles auswählen

	if ((getSystemPropertiesByType('generator')['basehref'] != 'true') || preg_match('~MSIE|Internet Explorer~i', htmlentities($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES, 'UTF-8'))) {
		// CON-1389 modifier /e is deprecated as of PHP 5.5
		$code = preg_replace_callback("/([\"|\'|=])upload\/(.?|.+?)([\"|\'|>])/i", function($match) use ($baseUri) {
            return stripslashes($match[1] . $baseUri . 'upload/' . $match[2] . $match[3]);
        }, $code);
	}
Das ist nicht sehr hübsch, erfüllt aber seinen Zweck. Wird kein basehref erzeugt ODER wird die Seite mit (irgendeinem) Internetexplorer besucht, gibts lange Pfade, anderenfalls bleiben die Pfade wie sie sind.
Viele Grüße aus dem Homeoffice im hohen Norden!
bodil

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Verkürzung der Upload-Pfade

Beitrag von bodil » Mi 29. Apr 2020, 16:59

Noch ein Hinweis: Diese Maßnahme (das Umwandeln aller absoluten Bildpfade in relative Bildpfade) ist dazu geeignet, XML-Sitemaps für Bilder oder PFDs unbrauchbar zu machen. In XML-Sitemaps dürfen nämlich nur ausschließlich absolute Pfade stehen.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Verkürzung der Upload-Pfade

Beitrag von xmurrix » Sa 2. Mai 2020, 11:04

bodil hat geschrieben:
Mi 29. Apr 2020, 16:59
...In XML-Sitemaps dürfen nämlich nur ausschließlich absolute Pfade stehen...
Danke für die Info, dieser Fall wird natürlich nicht vom AMR-Plugin unterstützt. Man könnte zwar auch das mit einer Konfiguration lösen, aber das wird dann vielleicht zu viel rumkonfigurieren für die meisten User...
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Verkürzung der Upload-Pfade

Beitrag von bodil » Di 5. Mai 2020, 10:13

Naja, es betrifft das AMR-Plugin ja auch nicht.
Das Plugin liefert absolute Pfade für Links zu Dateien im upload-Verzeichnis und genau die brauchen wir ja auch.
Wenn man es aber so umfrickelt wie ich, dass sich das Plugin nicht mehr drum kümmert, ob Pfade absolut sind oder nicht und gleichzeitig seinen Output so filtert, dass jedenfalls keine absoluten Pfade mehr auftauchen, dann hat man ein Problem mit xml-Sitemaps für Bilder und PDFs.
Meine Abhilfe: Im Outputfilter wird erkannt, ob der Outputcode eine xml-Datei ist, dann wird nicht gefiltert.
Grüße!
Bodil

Antworten