Tracking events with the js api causes 404 errors


#1

Hi all,

I have setup videotracking for my site using the following js code (GitHub - azine/vimeo.ga.js: Tracking Vimeo Player Events with Google Analytics. for the vimeo player and GitHub - azine/videojs-analytics: Analytics plugin for video.js for both GoogleAnalytics and Piwik for videojs.org player).

For both players I execute the following js to track the “Play”, “Pause”, “Seek” etc. events.


          _paq.push(['trackEvent', playerName, action, videoName]);

From the firebug network tab I can see that a GET request is being sent to my piwik instance:


https://myhost.com/piwik/piwik.php?e_c=Vimeo&e_a=Played%20video%3A%2025%25&e_n=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F135083225&e_v=false&idsite=1&rec=1&r=425419&h=17&m=27&s=29&url=https%3A%2F%2Fmyhost.com%2Fde%2Fhelp%2Fvideos&_id=c4e875fecfa5313c&_idts=1442589588&_idvc=1&_idn=0&_refts=0&_viewts=1442589588&send_image=0&pdf=0&qt=0&realp=0&wma=0&dir=0&fla=1&java=0&gears=0&ag=0&cookie=1&res=2560x1440&gt_ms=611


		_id	:c4e875fecfa5313c
		_idn	:0
		_idts	:1442589588	
	_idvc	:1
	_refts	:0
	_viewts	:1442589588
		ag	:0
	cookie	:1
		dir	:0
		e_a	:Started video
		e_c	:Vimeo
		e_n	:https://player.vimeo.com/video/135083225
		e_v	:false
		fla	:1
	gears	:0
	gt_ms	:877
		h	:17
	idsite	:1
		java	:0
		m	:39
		pdf	:0
		qt	:0
		r	:995473
	realp	:0
		rec	:1
		res	:2560x1440
		s	:44
send_image	:0
		url	:https://myhost.com/app_dev.php/de/help/videos
		wma	:0

From what I read in the documentation I would expect this to work fine.

But for some reason I get an 404-error?

Do I need to configure anything in piwik before I can use the event-feature?

Your help is highly appreciated!

Cheers,
Dominik


(Stefan Giehl) #2

First: For english questions, please do not use the german forum.

To answer your question: It should work out of the box (if you didn’t disable the Events plugin).
Can you open the piwik.php in you browser? If not take care that it was really uploaded and the file is accessible without any restrictions.


#3

Hallo,

sorry, ich hab übersehen, dass dies das Deutschsprachige Forum ist.

Ja, ich kann “http://myhost.com/piwik/piwik.php” aufrufen und erhalte “Piwik is a free/libre web analytics that lets you keep control of your data.” als Antwort. Das plugin (Events (Core)) ist aktiv.

Das heist “https://myhost.com/piwik/piwik.php” gibt obige Antwort und
"https://myhost.com/piwik/piwik.php?e_c=Vimeo&e_a=Paused%20video&e_n=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F135083225&e_v=false&idsite=1&rec=1&r=194450&h=12&m=22&s=40&url=https%3A%2F%2Fmyhost.com%2Fde%2F&urlref=https%3A%2F%2Fmyhost.com%2Fde%2Fdashboard&_id=6f5bac03fa404a85&_idts=1411598947&_idvc=685&_idn=0&_refts=1442657697&_viewts=1442657697&_ref=https%3A%2F%2Fvimeo.com%2F135083225%2Fsettings%2Fembed&send_image=0&pdf=0&qt=0&realp=0&wma=0&dir=0&fla=1&java=0&gears=0&ag=0&cookie=1&res=2560x1440&gt_ms=597"piwik.p..._ms=597" gibt einen 404-Fehler.

Beste Grüsse,
Dominik


(Stefan Giehl) #4

Das kann eigentlich kein 404-Fehler sein, wenn du Datei ohne Query-Parameter aufrufbar ist.
Sicher dass das kein 204 oder 500er ist?
Evt lässt sich im Error-Log von PHP auch ein Fehler finden…


#5

Hallo,

es ist tatsächlich ein 404-Error.

Und zwar hängt der Fehler mit dem Parameter “e_n” zusammen.

Ich übergab dort eine urlencoded URL. Anscheinend kann Piwik damit nicht umgehen, wirft einen 500-Error und leitet den Browser weiter zu einer Seite die es nicht gibt => daher der 404.

Gruss,
D.


(Stefan Giehl) #6

Wenn hier eine weiterleitung stattfindet, kannst du bitte kurz die header davon post?
Also von welche auf welche URL hier umgeleitet wird?


#7

Hallo,

hier die Request-Parameter:


_id	:e58494b08dba0172
_idn	:0
_idts	:1411586529
_idvc	:259
_refts	:0
_viewts	:1442841363
ag	:0
cookie	:1
dir	:0
e_a	:Started video
e_c	:Vimeo
e_n	:https://player.vimeo.com/video/135145910 (azine.me_Manager.gif)
e_v	:false
fla	:1
gears:0
gt_ms	:519
h	:15
idsite	:1
java	:0
m	:18
pdf	:0
qt	:0
r	:930715
realp	:0
rec	:1
res	:2560x1440
s	:17
send_image	:0
url	:http://azine.me/de/help/videos
wma	:0

und die Request-Headers:


GET /piwik/piwik.php?e_c=Vimeo&e_a=Started%20video&e_v=false&idsite=1&rec=1&r=930715&h=15&m=18&s=17&url=http%3A%2F%2Fazine.me%2Fde%2Fhelp%2Fvideos&_id=e58494b08dba0172&_idts=1411586529&_idvc=259&_idn=0&_refts=0&_viewts=1442841363&send_image=0&pdf=0&qt=0&realp=0&wma=0&dir=0&fla=1&java=0&gears=0&ag=0&cookie=1&res=2560x1440&gt_ms=519&e_n=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F135145910%20%28azine.me_Manager.gif%29 HTTP/1.1
Host: azine.me
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-CH,en-GB;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: piwik_ignore=ignore%3DczoxOiIqIjs%3D%3A_%3D179b6985b56827319c530a98c26e27495fecf0ff; _pk_ref.1.08b2=%5B%22%22%2C%22%22%2C1434113453%2C%22http%3A%2F%2Fuser.ghostrec.com%2F%3Fkey%3Drecording%26id%3D3549%22%5D; _ga=GA1.2.897649219.1392932405; _pk_id.1.bc4a=6f5bac03fa404a85.1411598947.697.1443352031.1443351757.; _pk_ref.1.bc4a=%5B%22%22%2C%22%22%2C1443351757%2C%22https%3A%2F%2Fvimeo.com%2F135083225%2Fsettings%2Fembed%22%5D; _pk_id.1.08b2=a672dd1311084c6d.1425044856.2.1434113468.1425044856.; REMEMBERME=QXppbmVcUGxhdGZvcm1CdW5kbGVcRW50aXR5XFVzZXI6Wkc5dGFXNXBhdz09OjE0NDQxNjI3Nzc6ZWU0OTRiZDEzNDhiMGFjZWYwZjQ5M2IzOTY3ZDQ0Y2Q4ZjVhMDNiYzI0OWFjNWQ1ZTlmMmUwNmNiYWM0NmMxZQ%3D%3D; PHPSESSID=5f7hp9ko9f96nui9rj3gs5ihu2; _pk_ses.1.bc4a=*
Connection: keep-alive

und die Response-Header:


HTTP/1.1 404 Not Found
Date: Sun, 27 Sep 2015 11:07:25 GMT
Server: Apache
X-Powered-By: PHP/5.5.29
Cache-Control: no-cache
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
x-ua-compatible: IE=Edge,chrome=1
X-XSS-Protection: 1; mode=block
x-content-type-options: nosniff
Content-Length: 2545
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

Dass es mit der .htaccess-Rewrite-Rule zusammenhängt könnte auch sein, kann ich mir aber nicht erklären.


#.htaccess im root-folder
<IfModule mod_rewrite.c>
    RewriteEngine On

    # Piwik: allow access to logo, but redirect all other requests to piwik/index.php
    RewriteRule ^piwik/misc/user/logo.*\.png$ - [L]
    RewriteRule ^piwik/misc/user/favicon.png$ - [L]
    RewriteRule ^piwik/$ piwik/index.php [L]


    # azine.me-Application
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

Für mich ist der Workaround ok, dass ich meine “Events” ohne URLs benenne.

Vielen Dank jedenfalls für die Hilfe!!

Gruss d.


(Stefan Giehl) #8

Ok. Hab mir die Daten mal angesehen…
Für mich sieht das eher nach einem Fehler in der Serverkonfiguration oder der htaccess Datei aus
Piwik würde keinen 404 zurückgeben solange es erreichbar ist.

Bezüglich deiner htaccess-Datei:

Du solltest auch die piwik.php von allen globalen Rewrites ausnehmen, da diese fürs tracking erreichbar sein muss.


#9

Hallo,

du hast recht, piwik schmeisst keinen 404… aber einen 406 …und dann wird mein Error-Document für Error-406 nicht gefunden, was zum 404 führt.

Ich habe das .htaccess mal ganz aus der doc-root entfernt und das Verhalten hat sich nur insofern geändert, dass die Antwort folgende war:


<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>406 Not Acceptable</title>
</head><body>
<h1>Not Acceptable</h1>
<p>An appropriate representation of the requested resource /piwik/piwik.php could not be found on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>

Response Headers:


HTTP/1.1 406 Not Acceptable
Date: Sun, 27 Sep 2015 19:38:18 GMT
Server: Apache
Content-Length: 385
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

Request-Headers:


GET /piwik/piwik.php?e_c=Vimeo&e_a=Started%20video&e_v=false&idsite=1&rec=1&r=930715&h=15&m=18&s=17&url=http%3A%2F%2Fazine.me%2Fde%2Fhelp%2Fvideos&_id=e58494b08dba0172&_idts=1411586529&_idvc=259&_idn=0&_refts=0&_viewts=1442841363&send_image=0&pdf=0&qt=0&realp=0&wma=0&dir=0&fla=1&java=0&gears=0&ag=0&cookie=1&res=2560x1440&gt_ms=519&e_n=https%3A%2F%2Fplayer.vimeo.com HTTP/1.1
Host: azine.me
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-CH,en-GB;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: piwik_ignore=ignore%3DczoxOiIqIjs%3D%3A_%3D179b6985b56827319c530a98c26e27495fecf0ff; _pk_ref.1.08b2=%5B%22%22%2C%22%22%2C1434113453%2C%22http%3A%2F%2Fuser.ghostrec.com%2F%3Fkey%3Drecording%26id%3D3549%22%5D; _ga=GA1.2.897649219.1392932405; _pk_id.1.bc4a=6f5bac03fa404a85.1411598947.698.1443382206.1443382104.; _pk_ref.1.bc4a=%5B%22%22%2C%22%22%2C1443382104%2C%22https%3A%2F%2Fvimeo.com%2F135083225%2Fsettings%2Fembed%22%5D; _pk_id.1.08b2=a672dd1311084c6d.1425044856.2.1434113468.1425044856.; REMEMBERME=QXppbmVcUGxhdGZvcm1CdW5kbGVcRW50aXR5XFVzZXI6Wkc5dGFXNXBhdz09OjE0NDQxNjI3Nzc6ZWU0OTRiZDEzNDhiMGFjZWYwZjQ5M2IzOTY3ZDQ0Y2Q4ZjVhMDNiYzI0OWFjNWQ1ZTlmMmUwNmNiYWM0NmMxZQ%3D%3D; PHPSESSID=5f7hp9ko9f96nui9rj3gs5ihu2; _pk_ses.1.bc4a=*
Connection: keep-alive

Sobald ich den Parameter “e_n” geändert habe (kein URL mehr), antwortete Piwik ganz normal mit einer 204 Meldung.

Ich habe auch ausprobiert, ob es an einem Leerschlag im “e_n”-Parameter liegt. Doch auch mit Leerschlag hat’s funktioniert ( => 204), solange es keine URL war.

Ich würde also sagen, dass es doch an der URL encoded URL liegt im “e_n” Parameter.

Gruss,
d.


(Stefan Giehl) #10

Hast du zufällig mod_security auf deinem Server aktiv?
Möglicherweise könnte das den 406 verursachen.


#11

Ich weiss nicht ob es installiert ist und auf dem SharedHost kann ich es z.Z. auch nicht so einfach rausfinden. apachectl, httpd & apache_get_modules sind für mich nicht verfügbar.

Es scheint mir aber komisch, dass mod_security etwas damit zu tun haben soll, dass

/piwik/piwik.php?e_n=test

funktioniert und

/piwik/piwik.php?e_n=https%3A%2F%2Ftest.com

einen 406-Fehler wirft.


(Stefan Giehl) #12

Ich habe das ganze mal lokal in meiner Entwicklungsumgebung nachgebaut.
Dort habe ich keine deartigen Probleme.

mod_security könnte hier schon eine Rolle spielen. Wird bei einem Request eine der Sicherheitsregeln verletzt gibt Apache einen 406 zurück.


#13

hmm… ok. Da ich piwik in einer “shared” Umgebung am laufen habe, kann ich an den “mods” nicht’s ändern. Gut, dass der Workaround (kein URL verwenden) funktioniert.

Danke für die Hilfe bei der Analyse.

Gruss,
d.