[PHP/MySQL] header 404 not found wordt overschreven

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

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste tweakers,

Het lukt me niet om met PHP/MySQL een redirect met de juiste header http response te maken wanneer een bezoeker een entry opvraagt uit mijn database die niet bestaat. De http response 404 wordt omgezet naar een 302 en vervolgens geredirect

Ik zal hier heel globaal de structuur opzetten zoals ik 'm gemaakt heb:

eerst wordt $_GET['p'] beveiligd met mysql_real_escape_string(), stripslahes, trim etc. Daarna wordt gekeken of de gestripte versie van $_GET['p'] ook voorkomt in de database, zo ja, php code uitvoeren en hangen aan html template, zo nee, dan de volgende code:
PHP:
1
2
3
4
5
6
7
else
    {
        header("HTTP/1.1 404 Not Found");
        // heb ook geprobeerd: header("HTTP/1.0 404 Not Found");
        // en: header("Status: 404 Not Found");
        header("location: /404.php");
    }
Als ik vervolgens een pagina opvraag met bijvoorbeeld Samspade of httpliveheader extensie van firefox, dan zie ik dat er een 302 header verstuurd wordt naar de 404-pagina toe. Dat levert (in samspade) bijvoorbeeld de volgende headers op:
code:
1
2
3
4
5
6
7
HTTP/1.1 302 Found

Date: Wed, 20 Dec 2006 13:27:19 GMT

Status: 404 Not Found

location: /404.php
Ik heb er een paar elementen uitgelaten voor verduidelijking, maar het gaat dus om de eerste regel, dat zou een 404 moeten zijn...

Iemand enig idee wat ik hier fout doe, vergeten ben, whatever?

maar dank as usual is groot :)

Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

Hmm.. dat is appart, ik test het hier op een nieuwe opgeving, en krijg exact het zelfde.

Apache 2.2 + PHP 5.2.0 op een windows bak

Vorige setup: Apache 1.3.x + php 4.4.0 op windows deed het wel goed.

Edit: zonder de redirect gaat het wel goed. Dan krijg je netjes een 404 Not Found. Denk dat je die /404.php maar moet includen dan ;)
PHP:
1
2
3
4
5
6
7
8
<?php
else
    {
        header("HTTP/1.1 404 Not Found");
        include("/404.php");
        exit;
    }
?>

oid

[ Voor 41% gewijzigd door RaZ op 20-12-2006 14:47 ]

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Volgens mij moet je, als je na die 404 not found nog een redirect wil doen eerst nog een header 302/found sturen voordat je pas weer een header location mag doen :)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Raz: dat is inderdaad een optie :), maar ik wil vooral weten waarom die redirect niet werkt :p
@schizoduckie: zoiets? :
PHP:
1
2
3
4
5
6
7
8
<?php
else
    {
        header("HTTP/1.1 404 Not Found");
        header("HTTP/1.1 302 Found");
        header("location: /404.php");
    }
?>
Edit: Nee dus, dat levert geen verschil op :(

[ Voor 7% gewijzigd door Verwijderd op 20-12-2006 15:02 ]


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Ik zit net even in wat soortgelijke code van mij te wroeten en ik zie dat bovenaan dit staat:

PHP:
1
2
header("HTTP/1.1 200 OK");
header("Status: 200 OK");


probeer die ook nog even na je 404 header :)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@schizoduckie: hoe bedoel je? Voor of na die 404 header? Klinkt niet echt logisch.. 8)7

[ Voor 3% gewijzigd door Verwijderd op 20-12-2006 15:11 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm, een 404-header is eigenlijk niet eens een goede optie als je tenminste rekening wil houden met allerlei extra infromatie, zoals referrers en eventuele pagerank en link-weight eigenschappen van de niet gevonden pagina: een 301 is in feite beter, dus daarom kies ik voor het volgende:
PHP:
1
2
3
4
5
6
    else
    {
        header("HTTP/1.1 301 Moved Permanently");
        header("location: /404.php");
        exit();
    }

Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

De webmaster guidelines van bijvoorbeeld google, gaan jouw idee niet leuk vinden.

Dit zijn sneaky redirects om het zo te zeggen. Een 404 betekend dat er geen inhoud is, pagina niet gevonden. Je kan dus iets wat er niet is, ook niet verplaatsen.

Ik weet niet welke informatie er wordt getoond bij je 404.php, maar het lijkt me sterk dat er nuttige content staat. Als je door zulke redirects dus PageRank gaat verhogen, krijg je straks dat mensen iets zoeken op je site, en doorklikken naar een foutmelding.

Links die je krijgt, worden geplaatst vanwege de inhoud, als de inhoud weg is, en niet verplaatst, lijkt me een 301 niet echt slim.

Het zou dus zomaar een penality kunnen opleveren.

Ey!! Macarena \o/


Verwijderd

Topicstarter
true,

daarom is het noodzakelijk om juist die referers goed in de gaten te houden en eventueel pagina's aanpassen of zelfs erbij maken (mits het past binnen het thema van je site) zodat het merendeel van die 'not found' fouten opgevangen kunnen worden. De 404 pagina van mij overigens, bevat zelfs wel een 404-header en bestaat qua content uit suggesties voor verdere navigatie door de site

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

De location header is juist bedoelt voor gebruik bij 30x headers, niet voor 404's. Een 404 nog eens redirecten is onzin.

Intentionally left blank


Verwijderd

Topicstarter
Het gaat trouwens om een nieuwe versie van mijn persoonlijke website die ik zojuist (met een combinatie van 404 en 301 headers) online gegooid heb: http://www.monlog.nl/. Sommige fouten worden door de server afgehandeld en andere door de php-code (die dus voor het probleem zorgt dat ik in eerste instantie noemde).

Sommige pagina's die eerst veel bezocht werden op de site, maar nu niet meer bestaan, worden ge-301'd naar een nieuwe pagina; anderen krijgen een 404.

De reden trouwens waarom ik zoveel gebruik maak van een 301 is omdat je een pagina (die niet meer bestaat) dan veel sneller wegkrijgt uit de index van Google.

Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

Google is inderdaad niet snel met het trashen van pagina's die 404 not found geven... Erger ik me ook suf aan. Pagina's die ik in oktober 2006 al getrashed heb, kent google nogsteeds... Zwaar waardeloos..

Ik zou idd op die urls een 301 kunnen geven. Maar het lijkt me niet echt de bedoeling eigenlijk. Heb een tijdje ouwe links een 410 Gone header gegeven, maar ook dat helpt niet.

Ik heb wat dat betreft wel een voordeel, ik laat mijn pagina's sowieso niet cachen. Als de content weg is, heeft dat een reden. Maar dat google die ouwe meuk na 3 maanden nogsteeds in de search results heeft, terwijl het een bewuste keuze is geweest dat die content weg is. Vind ik dit wel naatje.

Mijn idee van een 404 not found, en zeker bij een 410 gone, zou je denken dat google direct die content verwijderd.

Misschien een 301 geven, naar een pagina die niet bestaat, en nooit bestaan heeft een optie is? Ik wil die meuk eigenlijk wel weg hebben. Jammer dat er nog geen Removed header in gebruik is..

Please advice :P

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik weet dat dit topic al ouder is dan twee weken, maar misschien is het onderstaande nog een nuttige aanvulling. Het kan anders ook verplaatst worden naar het uitgebreide topic SEO-tips oid? Maar dat laat ik graag aan de mods over :)
  • Wat je het beste kunt doen, is je logs/statistieken nakijken en je foute pagina's opsporen;
  • vervolgens moet je beslissen wat je met die kennis gaat doen: blijkt het dat er ergens een foute link staat? Probeer dat op te lossen door bijvoorbeeld de webmaster van de betreffende site te mailen en te vragen of ze de link willen corrigeren/verwijderen. Staan er op je eigen site foute verwijzingen? Oplossen!
  • zoeken mensen naar info op je site die er niet is? Als het relevant is voor je site, voeg dan die pagina toe.
  • maken mensen vaak dezelfde spelfouten waardoor ze verkeerd terechtkomen? In dat geval kun je een 301 gebruiken om ze door te sturen naar de juiste pagina;
  • staan er nog steeds 404's in Google? 301 ze dan door naar de meest erop lijkende pagina's van je site. Google luistert niet (goed) naar 404's
Er zijn vast nog wel meer adviezen te geven
Pagina: 1