Htaccess für Apache 2.2


#1

Da ich gerade am selben Problem hänge: hat in den letzten 5 Jahren seit dem Themenpost jemand eine Lösung?
Auch ich habe die Matomo-Installation mit einem htaccess-Passwort abgesichert. Die Tracking-Datei matomo.,js lässt sich mit einer <Files…>-Direktive von der Zugriffsbeschränkung ausnehmen. OptOut benötigt jedoch die index.php, die dem Passwortschutz unterliegt.
Man kann mit der Direktive SetEnvIf in einer htaccess konditional eine Environmentvariable setzen. Ist diese gesetzt, kann man wiederum den Zugriff erlauben:
allow from env=[Variable]

Mein Problem ist, dass auf Apache 2.2 die Direktive SetEnvIf nicht auf Querystrings anzuwenden ist.
Die Opt-Out-Funktion von Matomo beruht jedoch darauf, dass index.php mit Querystringparametern aufgerufen wird.

Hat jemand von euch eine Lösung zu diesem Problem gefunden?


.htaccess und OptOut-Funktion?
(Fabian Dellwing) #2
<Files "*">
 AuthType Basic
 AuthName "Authentication Required"
 # to be explicit, state the provider
 AuthBasicProvider file
 AuthUserFile "/etc/httpd/.htpasswd"
 Require valid-user
</Files>

# Allow external access to piwik.php and piwik.js and matomo.js and robots.txt
<FilesMatch "(^piwik\.(php|js)|^matomo\.(php|js)|robots\.txt|optOut.js)">
 Require all granted
</FilesMatch>

# Allow Opt-Out
<Files "index.php">
 <If "(%{QUERY_STRING} =~ /^module\=CoreAdminHome\&action\=optOut(?!.*module\=)(?!.*action\=)/)">
   Require all granted
 </If>
</Files>

P.S. Die Variante ist für apache2 >= 2.4, aber 2.2 solltest du sowieso nicht mehr verwenden!


#3

Hallo Fabian,

vielen Dank für deinen htaccess-Code!
Nun schreibst du ja selbst, dass das erst ab Apache 2.4 funktioniert.
Das Serverbetriebssystem CentOS6 lässt leider keinen Apache 2.4 zu. Um Apache zu upgraden, muss ich den ganzen Server neu aufsetzen, was bei einem Produktivserver nicht so einfach ist.

Daher fragte ich explizit nach einer Lösung für Apache 2.2.
Aber wenn Matomo auf Apache 2.4 betrieben wird, ist deine Lösung natürlich bestens.

Viele Grüße

finnegan


(Lukas Winkler) #4

Hallo, du wirst vermutlich nicht darum herumkommen, bald über ein Upgrade nachzudenken, denn in 1.5 Jahren ist endgültig EOL für CentOS6:
https://wiki.centos.org/About/Product

Und auch jetzt hält dich ja nichts davon ab eine neuere Apache-Version zu verwenden, da ich mal vermute, dass du die einzige offiziell unterstützte PHP version (5.3.3) verwendest.


(Fabian Dellwing) #5

Das Einzige von dem ich sicher sagen kann, dass es nur in >= 2.4 funktioniert ist das Require all granted, du kannst natürlich einfach mal versuchen das durch die alte Variante zu ersetzen. Es ist durchaus möglich, dass es damit dann funktioniert.


#6

Dank für eure Kommentare!
Ich habe nun eine Lösung gefunden. Ich kann in der vhost.conf des Apache 2.2 dann, wenn ein OptOut-Request kommt, eine Environmentvariable setzen:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^module\=CoreAdminHome\&action\=optOut(?!.*module\=)(?!.*action\=)
RewriteRule  .* - [E=allowoptout:1,L]

Wenn diese Variable (hier: allowoptout) gesetzt ist, kann ich in der .htaccess der Matomo-Installation sagen:

<Files ~ "^index\.php$">
    # set by vhosts conf in Plesk
    Allow from env=allowoptout
    Satisfy any
</Files>

Das “Allow from” überprüft nur, ob die Environmentvariable gesetzt ist, nicht, welchen Inhalt sie hat.

@Lukas:
Ich ziehe den Server sicher bis 2021 (EOL CentOS 6) auf eine neue Kiste um.
CentOS 6 hält mich sehr wohl davon ab, Apache 2.4 zu benutzen; diese Version wird von CentOS 6 nicht unterstützt.
Und nein: ich verwende PHP7. Man kann sich so was ja auch selbst kompilieren :wink:

Viele Grüße

finnegan


(Fabian Dellwing) #7

Man kann sich auch apache2 selbst kompilieren :wink: