[PHP/Apache] HTTP_REFERER bij ErrorDocument

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een eigen fout pagina gemaakt die in apache aangeroepen wordt door de instelling ErrorDocument in httpd.conf

Dat werkt verder prima en hij laad de pagina inclusief foutmelding ook prima...

Nu wil ik alleen dat hij de pagina meegeeft (of tenminste laat zien) welke niet geladen kan worden (of waar een fout in opgetreden is) zodat ik deze mee kan sturen met het mailtje wat verzonden wordt als error report.

Dit dacht ik te doen met:
$currentPage = $_SERVER['HTTP_REFERER'];
In de hoop dat de pagina waar hij fout gaat meegegeven wordt in deze variabele... dit is dus helaas niet zo :(

Weet iemand hoe ik deze pagina dan wel kan weergeven?

Acties:
  • 0 Henk 'm!

  • BarthezZ
  • Registratie: Juli 2004
  • Niet online

BarthezZ

anti voetbal en slechte djs!

Ik zou het zo snel niet weten, maar je zou een var_dump op $_SERVER kunnen doen en kijken of daar je source pagina op staat.

Btw, in general heeft een error report op 404 pagian's weinig nut heb ik uit ervaring gemerkt, komt veel meer troep langs

Acties:
  • 0 Henk 'm!

Verwijderd

Met het gedrag van $_SERVER i.c.m. ErrorDocument ben ik niet bekend.

Waar ik zelf wel tegenaan ben gelopen, is dat POST-variabelen niet worden meegegeven. Het zou mij dan ook niets verbazen als meer variabelen het haasje zijn.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Technisch gezien is de pagina die je foutpagina aanroept geen referer. Een referer wordt gebruikt om aan te geven op welke pagina de gebruiker eerst was, maar op die fout gelopen pagina is hij nooit geweest. ;) Als de referer al gezet is, dan is dat de pagina die juist naar die fout gelopen pagina verwees.

Wat je wel kan doen om je probleem op te lossen zou ik zo niet weten, eigenlijk.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Bitage
  • Registratie: April 2006
  • Laatst online: 19-05-2024
Als je een errordocument voor je neus krijgt, blijft het adres in de adresbalk toch gewoon gelijk? Dan zou je kunnen proberen om met AJAX de url te verzenden.

Dus iets als

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function sendError()
  {
  var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
      catch (e)
        {
        alert("Your browser does not support AJAX!");
        return false;
        }
      }
    }
    xmlHttp.onreadystatechange=function()
      {
      if(xmlHttp.readyState==4)
        {
        // Doe niets
        }
      }
    xmlHttp.open("POST","/senderror.php?url="+document.location.href,true);
    xmlHttp.send(null);

}

Acties:
  • 0 Henk 'm!

  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 17-09 16:35

djiwie

Wie?

Als je de URL die werd aangeroepen wilt weten kun je $_SERVER["REQUEST_URI"] gebruiken, en dan de eventuele query (het gedeelte na het vraagteken) eruit filteren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
djiwie schreef op zondag 25 november 2007 @ 17:18:
Als je de URL die werd aangeroepen wilt weten kun je $_SERVER["REQUEST_URI"] gebruiken, en dan de eventuele query (het gedeelte na het vraagteken) eruit filteren.
Top! Die is inderdaad gevuld met de goede pagina :)

Misschien is het volgende ook mogelijk (zou natuurlijk helemaal mooi zijn); kan ik ook kijken welke pagina geleid heeft tot het openen van een verkeerde pagina? Dus stel dat op pagina A een link staat naar pagina B die niet bestaat, ik de naam van pagina A krijg te zien?

Acties:
  • 0 Henk 'm!

  • kunnen
  • Registratie: Februari 2004
  • Niet online
Dat is de referer

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou kennelijk niet, die is namelijk leeg (zie mijn eerste post bovenaan, die gebruikte ik juist eerst)...

Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 18-09 15:14

ATS

Misschien kan je die met behulp van AJAX vinden? Daar kan je namelijk de history van de client benaderen.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 17-09 16:35

djiwie

Wie?

Verwijderd schreef op maandag 26 november 2007 @ 09:01:
Nou kennelijk niet, die is namelijk leeg (zie mijn eerste post bovenaan, die gebruikte ik juist eerst)...
Bij mij werkt het wel, de Referer staat in $_SERVER['HTTP_REFERER']. Wat krijg je met print_r($_SERVER); ? En wat staat er in je .htaccess?
Als je in je .htaccess (of httpd.conf) verwijst naar een volledige URL (inclusief http://) dan worden dergelijke variabelen niet meegegeven.

Of heb je misschien een filter in je browser/firewall zitten dat de Referer:-header niet meestuurt?

Acties:
  • 0 Henk 'm!

  • Evilbee
  • Registratie: November 2002
  • Laatst online: 14:59
De referer is de pagina waar je vandaan bent gekomen. Om de huidige pagina op te vragen gebruik je $_SERVER['REQUEST_URI']

LinkedIn - Collega worden?


Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

ATS schreef op maandag 26 november 2007 @ 09:45:
Misschien kan je die met behulp van AJAX vinden? Daar kan je namelijk de history van de client benaderen.
Dat is niet mogelijk. Je kan de gebruiker wel heen en weer sturen in de history, maar niet uitlezen welke pagina dat was.

Lees maar op quirksmode. :)

Acties:
  • 0 Henk 'm!

  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 17-09 16:35

djiwie

Wie?

En da's maar goed ook. :+

Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 18-09 15:14

ATS

super-muffin schreef op dinsdag 27 november 2007 @ 15:12:
[...]
Dat is niet mogelijk. Je kan de gebruiker wel heen en weer sturen in de history, maar niet uitlezen welke pagina dat was.

Lees maar op quirksmode. :)
Goed punt.
En dat is ook een goed punt :*)

[ Voor 20% gewijzigd door ATS op 27-11-2007 17:58 ]

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

Verwijderd

History uitlezen kan inderdaad niet. Kijken of een URI bezocht is kan wel.

Visited links kun je afwijkend stijlen. Door van een link de stijl op te vragen, kun je achterhalen of een link al dan niet bezocht is.

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>I know where you've been</title>
<style type="text/css">
    a         { color: rgb(255,0,0) }
    a:visited { color: rgb(0,255,0) }
</style>

<h1>I know where you've been</h1>

<ul>
    <li><a href="http://mail.google.com/">Gmail</a>
    <li><a href="http://www.hotmail.com/">Hotmail</a>
    <li><a href="http://sex.com/">Sex.com</a>
</ul>


JavaScript:
1
2
3
4
5
6
7
links = document.getElementsByTagName('A')
for (i=0; i<links.length; i++)
{
    color = document.defaultView.getComputedStyle(links[i], null).getPropertyValue('color')
    if (color == 'rgb(0, 255, 0)')
        alert('You visited ' + links[i].href)
}


Voorbeeld getest in Iceweasel, versie 2.0.0.8.

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Doe een print_r($_SERVER) en je ziet dat je een aantal REDIRECT_* variabelen tot je beschikking hebt, waaronder de REDIRECT_REQUEST_URI, welke aangeeft welke URL de error heeft getriggered.

Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

Verwijderd schreef op dinsdag 27 november 2007 @ 22:07:
History uitlezen kan inderdaad niet. Kijken of een URI bezocht is kan wel.

Visited links kun je afwijkend stijlen. Door van een link de stijl op te vragen, kun je achterhalen of een link al dan niet bezocht is.

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>I know where you've been</title>
<style type="text/css">
    a         { color: rgb(255,0,0) }
    a:visited { color: rgb(0,255,0) }
</style>

<h1>I know where you've been</h1>

<ul>
    <li><a href="http://mail.google.com/">Gmail</a>
    <li><a href="http://www.hotmail.com/">Hotmail</a>
    <li><a href="http://sex.com/">Sex.com</a>
</ul>


JavaScript:
1
2
3
4
5
6
7
links = document.getElementsByTagName('A')
for (i=0; i<links.length; i++)
{
    color = document.defaultView.getComputedStyle(links[i], null).getPropertyValue('color')
    if (color == 'rgb(0, 255, 0)')
        alert('You visited ' + links[i].href)
}


Voorbeeld getest in Iceweasel, versie 2.0.0.8.
Maar dan weet je niet van welke pagina de gebruiker is gestuurd. En dus ook niet of het van een interne pagina komt of een oude link in Google bv. :)
Pagina: 1