Tine 2.0: Apache, htaccess und die URL-Weiterleitungsregeln

In den Kommentaren zum Artikel Installation von Tine 2.0 – 1.überarbeitete Fassung kamen Fragen bzw. Probleme auf bezunehmend auf die URL-Weiterleitungsregeln für WebDAV, CalDAV und CardDAV.

Die *DAV-Weiterleitungen werden benötigt, wenn man Thunderbird oder andere nicht ActiveSync-Software oder -Geräte, mit Tine 2.0 synchronisieren möchte.

Nachfolgend geht es um die Verwendung von htaccess-Dateien in Verbindung mit dem Apache Webserver. Als Vorlage für die Regeln dienten die Wiki-Artikel Synchronisation / ActiveSync und Synchronisation / Thunderbird. Diese Informationen kann man nicht nur auf dem eigenen Webserver anwenden, sondern auch bei Webhostern.

Ganz wichtig zu wissen ist im Vorfeld, wo sich die Tine 2.0-Installation befindet. Damit ist gemeint, ob es sich im Wurzelverzeichnis des Webserver, z.B. “/var/www” befindet oder in einem Unterverzeichnis, wie z.B. “/var/www/tine20”, denn hiervon ist die Anzahl und die Konfiguration der htaccess-Dateien abhängig.

Damit die Weiterleitungsregeln funktionieren muss der Apache Webserver wie folgt konfiguriert sein:

AllowOverride All
# Order deny,allow
# Deny from all
LoadModule rewrite_module modules/mod_rewrite.so

Konfigurations-Beispiele für htaccess-Dateien

Tine 2.0 befindet sich im Unterverzeichnis “/tine20/”. Variante mit einer htaccess-Datei.

Inhalt der htaccess-Datei im Wurzelverzeichnis:

RewriteEngine on
RewriteRule Microsoft-Server-ActiveSync(.*) /tine20/index.php$1 [E=ACTIVESYNC:true,E=REMOTE_USER:%{HTTP:Authorization}]
RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
RewriteRule ^$ /tine20/index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^addressbooks /tine20/index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^calendars /tine20/index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^principals /tine20/index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^webdav /tine20/index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

Tine 2.0 befindet sich im Unterverzeichnis “/tine20/”. Variante mit zwei htaccess-Dateien.

Inhalt der htaccess-Datei im Wurzelverzeichnis:

RewriteEngine on
RewriteRule Microsoft-Server-ActiveSync(.*) /tine20/index.php$1 [E=ACTIVESYNC:true,E=REMOTE_USER:%{HTTP:Authorization}]

Inhalt der htaccess-Datei im Tine 2.0-Verzeichnis:

RewriteEngine on
RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
RewriteRule ^$ index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^addressbooks index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^calendars index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^principals index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^webdav index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

Tine 2.0 befindet sich im Wurzelverzeichnis des Webservers.

Inhalt der htaccess-Datei im Wurzelverzeichnis:

RewriteEngine on
RewriteRule Microsoft-Server-ActiveSync(.*) index.php$1 [E=ACTIVESYNC:true,E=REMOTE_USER:%{HTTP:Authorization}]
RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
RewriteRule ^/$ /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^/addressbooks index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^/calendars index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^/principals index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteRule ^/webdav index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

Wie man sieht sind die Unterschiede nur sehr gering, aber zeigen schon große Wirkung.

Update 08.01.2016

Eine Beispiel-htaccess-Datei (ohne vorangestellten Punkt) findet man nach der Tine 2.0-Installation via Zip-Archiv im Verzeichnis “docs”:

DirectoryIndex index.php

    php_value max_input_time 120
    php_value session.gc_maxlifetime 86400
    php_value memory_limit 128M
    php_value upload_max_filesize 20M
    php_value post_max_size 20M
    php_value safe_mode off
    php_flag display_errors off
    php_flag log_errors on
    php_flag magic_quotes_gpc off
    php_flag magic_quotes_runtime off
    php_flag register_globals off
    php_value max_execution_time 90

    RewriteEngine on

    # ActiveSync
    RewriteRule ^Microsoft-Server-ActiveSync index.php?frontend=activesync         [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    
    # OpenID
    RewriteRule ^users/(.*)                  index.php?frontend=openid&username=$1 [L,QSA]

    # WebDAV / CalDAV / CardDAV
    RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
    RewriteRule ^$                           index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    RewriteRule ^addressbooks                index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^calendars                   index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^webdav                      index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^principals                  index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^remote.php                  index.php?frontend=webdav             [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    
    # Anonymous downloads
    RewriteRule ^download/get/(.*)           index.php?method=Download.downloadNode&path=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^download/show/(.*)          index.php?method=Download.displayNode&path=$1  [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    ExpiresActive on

    ExpiresByType image/gif "access plus 1 month 1 days"
    ExpiresByType image/jpeg "access plus 1 month 1 days"
    ExpiresByType image/png "access plus 1 month 1 days" 

Bisher in diesem Beitrag bzw. Blog nicht genannt wurden die für den anonymen Download notwendigen Regeln nach Freigabe im Filemanager:

# Anonymous downloads
    RewriteRule ^download/get/(.*)           index.php?method=Download.downloadNode&path=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^download/show/(.*)          index.php?method=Download.displayNode&path=$1  [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

Ich muss zugeben, ich habe diese erst im Forum gefunden, bevor ich dran gedacht habe im Beispiel nachzusehen:

Tine 2.0 Forum – Filemanager Publish Configuration Requirements

Hinweis: Der anonyme Download funktioniert nur via Browser, nicht via WebDAV(-Client).

Ebenfalls interessant ist die Möglichkeit, via ownCloud-Client einen Abgleich einzurichten:

RewriteRule ^remote.php index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

Diese Zeile findet sich sowohl im Beispiel als auch im Wiki:

Tine 2.0 Wiki – Synchronisation with Owncloud clients

6 Kommentare

  1. Olli

    HAMMER!
    Danke, genau das, was ich gebraucht habe.

    Hätt ich das vor 2 Tagen gefunden, wär ich schon vor 2 Tagen fertig gewesen.

    DANKE!!

  2. Jan

    Vielen Dank für die ausführliche Anleitung.

    Leider scheitere ich dennoch an der Einrichtung auf einem 1und1 Webhost.
    Die Installation läuft sauber durch.
    Versuche ich aber auf http://tine.domain.de/Microsoft-Server-ActiveSync oder CalDAV zuzugreifen erhalte ich immer Error 404: NOT FOUND!

    Ich habe unter 1und1 eine Subdomain tine.domain.de eingerichtet. Diese verweist auf den Ordner “Domain/tine20/”

    Ich habe mich auch an deinen anderen Varianten versucht, gehe aber davon aus das die letzte “Tine 2.0 befindet sich im Wurzelverzeichnis des Webservers” die passende ist, oder?
    Daher liegt .htaccess und php.ini direkt unter “Domain/tine20/”.

    Wie kann ich Deinen Hinweis überprüfen?
    “AllowOverride All
    # Order deny,allow
    # Deny from all
    LoadModule rewrite_module modules/mod_rewrite.so”

    Beste Grüße
    Jan

  3. andy

    Sieht so aus, als ob da irgendwas noch nicht greift.
    Tine ganz normal aufrufen geht aber? Ich meine damit Tine im Browser über die URL http(s)://subdomain.domain.tld aufrufen.
    ActiveSync ist auch innerhalb von Tine installiert (Setup – Anwendungsverwaltung)? Wobei das für CalDAV usw. keine Rolle spielt.

    Prinzipiell liest sich dein Kommentar gut für mich.
    Ich muss allerdings dazu sagen, das ich es über Subdomain noch nie versucht habe.
    Behaupten würde ich allerdings schon, dass das so gehen sollte.

    Da man den Apachen bei 1&1 nicht direkt konfigurieren kann, fällt der Part mit “Load Module…” erstmal weg.
    Das Modul ist per Standard geladen und wird mittels .htaccess gesteuert.
    D.h. wie im Artikel beschrieben im Wurzelverzeichnis eine .htaccess mit folgendem Inhalt anlegen:

    RewriteEngine on
    RewriteRule Microsoft-Server-ActiveSync(.*) index.php$1 [E=ACTIVESYNC:true,E=REMOTE_USER:%{HTTP:Authorization}]
    RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
    RewriteRule ^/$ /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^/addressbooks index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^/calendars index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^/principals index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^/webdav index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    Ich weiß nicht wie es mittlerweile bei 1&1 ist, aber früher musste man um PHP5 zu aktivieren noch

    AddType x-mapp-php5 .php
    AddHandler x-mapp-php5 .php

    in die .htaccess-Datei reinpacken.

    Evtl. darf/muss man noch was mit “RewriteBase /” machen.

    Vielleicht findet du hier noch etwas brauchbares:

    http://hilfe-center.1und1.de/homepage-entwickeln-c82634/htaccess-c83883/haeufig-verwendete-htaccess-direktiven-a784801.html

  4. Jan

    Danke für Deinen Hinweis.

    Mittlerweile habe ich es auch schon für ActiveSync hinbekommen. Nur Webdav funktioniert noch immer nicht.
    Hier mal meine derzeitigen Modifikationen für 1und1:

    .htaccess:

    AddType x-mapp-php6 .php
    AddHandler x-mapp-php6 .php
    RewriteEngine on
    RewriteBase /
    RewriteRule Microsoft-Server-ActiveSync(.*) index.php$1 [E=ACTIVESYNC:true,E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
    RewriteRule ^/$ /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^/addressbooks /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^/calendars /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^/principals /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    RewriteRule ^/webdav /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]

    Zusätzlich musste ich noch in */tine20/tinebase/core.php* folgende
    Änderung machen (REDIRECT_ zugefügt):

    _ZEILE 201:___
    /**************************** ActiveSync API ****************************
    * RewriteRule ^/Microsoft-Server-ActiveSync
    /index.php?frontend=activesync [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
    */
    } elseif((isset($_SERVER[‘REDIRECT_REDIRECT_ACTIVESYNC’]) &&
    $_SERVER[‘REDIRECT_REDIRECT_ACTIVESYNC’] == ‘true’) ||
    (isset($_GET[‘frontend’]) && $_GET[‘frontend’] ==
    ‘activesync’)) {
    $server = new ActiveSync_Server_Http();

    und unter */tine20/ActiveSync/Server/Http.php *ebenfalls REDIRECT_ zugefügt:
    _
    ZEILE 45:___
    // when used with (f)cgi no PHP_AUTH* variables are available
    without defining a special rewrite rule
    if(!isset($_SERVER[‘PHP_AUTH_USER’])) {
    // “Basic didhfiefdhfu4fjfjdsa34drsdfterrde…”
    if (isset($_SERVER[“REMOTE_USER”])) {
    $basicAuthData =
    base64_decode(substr($_SERVER[“REMOTE_USER”], 6));
    } elseif (isset($_SERVER[“REDIRECT_REDIRECT_REMOTE_USER”])) {
    $basicAuthData =
    base64_decode(substr($_SERVER[“REDIRECT_REDIRECT_REMOTE_USER”], 6));
    } elseif (isset($_SERVER[“Authorization”])) {
    $basicAuthData =
    base64_decode(substr($_SERVER[“Authorization”], 6));
    } elseif (isset($_SERVER[“HTTP_AUTHORIZATION”])) {
    $basicAuthData =
    base64_decode(substr($_SERVER[“HTTP_AUTHORIZATION”], 6));
    }

    Ich habe auch schon versucht mit den hier (http://www.tine20.org/forum/viewtopic.php?f=12&t=10596&hilit=webdav) genannten Modifikationen weiterzukommen. Leider erfolglos.
    Noch eine Idee?

    Gruß
    Jan

  5. andy

    Hm, ich weiß da nun leider nicht mehr weiter.
    Das “Glück” an Tine selbst Modifikationen durchführen zu müssen,
    damit irgendein Sync läuft hatte ich bislang nicht.
    Am Besten das Thema mal im Tine-Forum ansprechen.
    Es gibt ja mehrere die bei 1&1 sind.

  6. Holger

    Großes Kino.

    Inbetriebnahme CalDav war ein Kinderspiel.

    Vielen Dank!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

© 2025 Andy's Blog

Theme von Anders NorénHoch ↑