[TYPO3-german] Realurl für URL ausstellen

Stephan Schuler Stephan.Schuler at netlogix.de
Mon Mar 23 16:18:44 CET 2015


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hallo zusammen.

Ich habe das vor einiger Zeit so gelöst:

https://gist.github.com/anonymous/6d07e51100f75fcb488d
https://gist.github.com/anonymous/ecf429c9df480a523e65
https://gist.github.com/anonymous/ffcce414e71e3cee06a7
https://gist.github.com/anonymous/f512c6f6374b5890920d

Dass es ein Downloadlink auf eine banale Datei ist wird der Apache schon entscheiden. In der Standard-TYPO3-Konfiguration würde ein solcher Dateilink nicht mal auf einen PHP-Prozess treffen, weil die Standard-.htaccess diesen Request schon direkt ans Dateisystem weitergibt.
Das heißt: Man muss für solche gesicherten Downloads ohnehin eine zusätzliche Regel in die .htaccess-Datei aufnehmen.

Und dann darf da auch gleich ein Indikator dran stehen, der TYPO3 in einen separaten Page-Type routet.

RealURL wird dadurch unterbrochen, dass mein preProcessRequest-Hook (der vor RealURL passiert) einfach den Query-String und die Request-URI leert. Dadurch trifft RealURL dann auf eine URL bei der es nichts zu tun gibt.

Dieser Schritt ist die "preProcessRequest"-Methode. Erstens muss die offensichtlich vor RealURL passieren, zweitens braucht sie aber keinerlei Konfiguration. Es ist also nicht notwendig, z.B. auf TypoScript zu warten.

Dann läuft das TYPO3-FE-Rendering in das per TypoScript definierte PAGE-Objekt, es darf also TypoScript geladen werden wenn notwendig.

Der zweite Schritt ist dann die "run"-Methode.
Hier ist dann TypoScript bereits geladen. Das ist notwendig, weil man z.B. unterschiedliches Verhalten pro Download-Domain haben kann.

Und in der "run"-Methode darf dann die eigentliche Download-Magie implementiert werden. Berechtigungsprüfung, Readfile oder X-Sendfile, ggf. eine Weiterleitung an eine signierte Amazon-Cloudfront-URL mit einigen Minuten Verfallsdatum.

Offensichtlich ist dieses Konstrukt von RealURL entkoppelt. Es verhindert zwar zuverlässig dass RealURL in den 404er läuft, allerdings ist es eben nicht an RealURL gebunden. Und dass die Download-Magie anschließend mit vollständig flexiblem TypoScript passieren kann erlaubt einen recht flexiblen Einsatz.

Gruß,



Stephan Schuler
Web-Entwickler | netlogix Media

Telefon: +49 (911) 539909 - 0
E-Mail: Stephan.Schuler at netlogix.de
Web: media.netlogix.de




netlogix GmbH & Co. KG
IT-Services | IT-Training | Media
Neuwieder Straße 10 | 90411 Nürnberg
Telefon: +49 (911) 539909 - 0 | Fax: +49 (911) 539909 - 99
E-Mail: info at netlogix.de | Web: http://www.netlogix.de

netlogix GmbH & Co. KG ist eingetragen am Amtsgericht Nürnberg (HRA 13338)
Persönlich haftende Gesellschafterin: netlogix Verwaltungs GmbH (HRB 20634)
Umsatzsteuer-Identifikationsnummer: DE 233472254
Geschäftsführer: Stefan Buchta, Matthias Schmidt



- -----Ursprüngliche Nachricht-----
Von: typo3-german-bounces at lists.typo3.org [mailto:typo3-german-bounces at lists.typo3.org] Im Auftrag von Olivier Seubert
Gesendet: Sonntag, 22. März 2015 23:44
An: typo3-german at lists.typo3.org
Betreff: [TYPO3-german] Re: Realurl für URL ausstellen

Habe folgende Lösung gefunden: Einen RealURL-Hook setzen und damit verhindern, dass RealURL die URL witer auflöst:

In der ext_localconf.php setzt man z.B.:
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['decodeSpURL_preProc'][] = 'EXT:yourextension/Classes/Hooks/RealUrlHook.php:\\YourVendor\\YourExtension\\Hooks\\RealUrlHook->decodeSpURL_preProc';

Und in der yourextension/Classes/Hooks/RealUrlHook.php:
<?php

namespace YourVendor\YourExtension\Hooks;

/**
* Hook functions for RealURL.
*
* @package yourextension
* @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later */ class RealUrlHook {

/**
* Hook function to prevent RealURL from further parsing,
* when parameter is set via HTTP-request. Instead forward to
* root page.
*
* @param array $params
* @param tx_realurl $ref
*/
function decodeSpURL_preProc(&$params, &$ref) { // check if get parameter is set if (($_SERVER !== null) && array_key_exists('QUERY_STRING', $_SERVER) && preg_match('/(?:^|.*&)tx_yourextension\\[bypassrealurl\\]=(?:1|true).*/is', $_SERVER['QUERY_STRING'])) { // if yes, forward to root page $params['URL'] = "/"; } } }

Hoffe das ist hilfreich für irgendjemanden.
_______________________________________________
TYPO3-german mailing list
TYPO3-german at lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

-----BEGIN PGP SIGNATURE-----
Version: PGP Universal 3.3.2 (Build 15704)
Charset: utf-8

wpUDBQFVEC7Wpp0IwsibV8MBCF4MBACmU/8dy3cTJavontlpGSnJYd4NshCtxf+u
I/ivk2L2U6bY9OyNQ1lo6kFt5wuyuoBBF+FWhvEVpziB2CWLt6JKvxvdG9Wm21kA
58ssHBBopTDQw8EqJMMESqTbT5NDx3KT2TAweEq4JnBIpMXM2aGlQVbf1nhYhTpX
r5HszUtm2g==
=4Equ
-----END PGP SIGNATURE-----


More information about the TYPO3-german mailing list