Bekijk Volledige Versie : 301-redirect syntaxis
Nico Schuyt
07/12/05, 11:15
Volgens http://nl2.php.net/manual/en/function.header.php zou dat kunnen met
$toLocation="http://".$_SERVER['HTTP_HOST']."/404.php";
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: '.$toLocation);
Ik kreeg laatst van iemand het advies om het in één regel te doen:
header("Location: ".$toLocation,true,301);
Kan iemand bevestigen dat dat een correcte redirect is?
--
Nico Schuyt
http://www.nicoschuyt.nl/
Rene Pijlman
07/12/05, 11:45
Nico Schuyt:
>Ik kreeg laatst van iemand het advies om het in één regel te doen:
> header("Location: ".$toLocation,true,301);
>
>Kan iemand bevestigen dat dat een correcte redirect is?
In PHP 4.3.0 en hoger, ja.
http://nl2.php.net/manual/en/function.header.php
--
René Pijlman
Wat wil jij worden? http://www.carrieretijger.nl
Nico Schuyt
07/12/05, 12:00
Rene Pijlman wrote:
> Nico Schuyt:
>> Ik kreeg laatst van iemand het advies om het in één regel te doen:
>> header("Location: ".$toLocation,true,301);
>> Kan iemand bevestigen dat dat een correcte redirect is?
> In PHP 4.3.0 en hoger, ja.
> http://nl2.php.net/manual/en/function.header.php
Ah, dat had ik over het hoofd gezien. Bedankt!
Soms verwarrend die headers:
Met:
$toLocation="http://".$_SERVER['HTTP_HOST']."/404.php";
header("HTTP/1.0 404 Not Found");
header("Location: ".$toLocation);
zou ik verwachten dat de server een 404 status krijgt.
De log levert echter op:
127.0.0.1 - - [07/Dec/2005:11:43:26 +0100] "GET /xxxxx.php HTTP/1.1"
302 - ....
Nico Schuyt
http://www.nicoschuyt.nl/
Warden Dave
07/12/05, 12:15
"Nico Schuyt" <nschuyt@hotmail.com> wrote:
> Rene Pijlman wrote:
>> In PHP 4.3.0 en hoger, ja.
>> http://nl2.php.net/manual/en/function.header.php
>
> Ah, dat had ik over het hoofd gezien. Bedankt!
>
> Soms verwarrend die headers:
>
> Met:
> $toLocation="http://".$_SERVER['HTTP_HOST']."/404.php";
> header("HTTP/1.0 404 Not Found");
> header("Location: ".$toLocation);
> zou ik verwachten dat de server een 404 status krijgt.
> De log levert echter op:
> 127.0.0.1 - - [07/Dec/2005:11:43:26 +0100]
> "GET /xxxxx.php HTTP/1.1" 302 - ....
Wellicht wat verwarrend, maar het staat gewoon beschreven in de handleiding:
"The second special case...". (Je zult wellicht ook een 'Moved Permanently'
reactie bedoelen en niet die 'Not Found'.)
groet,
WD
Warden Dave
07/12/05, 12:30
"Warden Dave" <warden_dave@mnsys.invalid> wrote:
> Nico Schuyt:
>> $toLocation="http://".$_SERVER['HTTP_HOST']."/404.php";
> (Je zult wellicht ook een 'Moved Permanently' reactie bedoelen en niet die
> 'Not Found'.)
Ah, ogenschijnlijk niet (ik was wat snel), maar dan kun je beter de server
zelve instrueren bij een 404 je '404.php' te gebruiken en kun je het in je
script bij een 404 reactie laten...
WD
Nico Schuyt
07/12/05, 13:00
Warden Dave wrote:
> "Nico Schuyt" wrote:
>> Met:
>> $toLocation="http://".$_SERVER['HTTP_HOST']."/404.php";
>> header("HTTP/1.0 404 Not Found");
>> header("Location: ".$toLocation);
>> zou ik verwachten dat de server een 404 status krijgt.
>> De log levert echter op:
>> 127.0.0.1 - - [07/Dec/2005:11:43:26 +0100]
>> "GET /xxxxx.php HTTP/1.1" 302 - ....
> Wellicht wat verwarrend, maar het staat gewoon beschreven in de
> handleiding: "The second special case...".
Hmmm, het is me nog niet helemaal duidelijk.
Als ik alleen:
header("HTTP/1.0 404 Not Found");
gebruik, levert dat een 404 status op in de log:
127.0.0.1 - - [07/Dec/2005:12:24:12 +0100] "GET /leverancier.php
HTTP/1.1" 404 - "....
In .htaccess heb ik staan:
ErrorDocument 404 /404.php
Toch krijg ik *niet* mijn 404.php te zien maar een IE-melding 'page not
found'
Een andere niet bestaande pagina als hghghghghg.php levert *wel* de 404.php
op met in de log:
127.0.0.1 - - [07/Dec/2005:12:28:25 +0100] "GET /hghghghghg.php HTTP/1.1"
404
> (Je zult wellicht ook een
> 'Moved Permanently' reactie bedoelen en niet die 'Not Found'.)
Eigenlijk niet. Ik controleer of een pagina een parameter meekrijgt. Als dat
niet het geval is wil ik 'm naar de 404.php sturen met een 404-status (Lijkt
me netter voor Google dan een 302). Een 301 durf ik niet goed aan omdat de
pagina wel degelijk geldig is (mits de parameter is opgegeven).
(Maar misschien begin ik op dit moment complete wartaal uit te slaan :-)
--
Nico Schuyt
http://www.nicoschuyt.nl/
Rene Pijlman
07/12/05, 13:00
Nico Schuyt:
>Toch krijg ik *niet* mijn 404.php te zien maar een IE-melding 'page not
>found'
Dat is misschien een IE-anomalie.
http://www.plinko.net/404/howto.asp?article=3
Je kunt beter client-side naar de headers kijken, bijvoorbeeld met de Web
Developer extensions in Firefox. Zowieso mooi spul.
>Eigenlijk niet. Ik controleer of een pagina een parameter meekrijgt. Als dat
>niet het geval is wil ik 'm naar de 404.php sturen met een 404-status (Lijkt
>me netter voor Google dan een 302).
Dat hangt ervan af. RFC-2616 zegt:
"302 Found
The requested resource resides temporarily under a different URI. Since
the redirection might be altered on occasion, the client SHOULD continue
to use the Request-URI for future requests."
"404 Not Found
The server has not found anything matching the Request-URI. No indication
is given of whether the condition is temporary or permanent. The 410
(Gone) status code SHOULD be used if the server knows, through some
internally configurable mechanism, that an old resource is permanently
unavailable and has no forwarding address. This status code is commonly
used when the server does not wish to reveal exactly why the request has
been refused, or when no other response is applicable."
Welke is in dit geval van toepassing?
>Een 301 durf ik niet goed aan omdat de pagina wel degelijk geldig is
Que? Juist als hij wel degelijk geldig is, maar de URL anders moet zijn,
komt een 301 meer in aanmerking dan een 404.
--
René Pijlman
Wat wil jij worden? http://www.carrieretijger.nl
Warden Dave
07/12/05, 13:30
"Nico Schuyt" <nschuyt@hotmail.com> wrote:
> Hmmm, het is me nog niet helemaal duidelijk.
> Als ik alleen:
> header("HTTP/1.0 404 Not Found");
> gebruik, levert dat een 404 status op in de log:
> 127.0.0.1 - - [07/Dec/2005:12:24:12 +0100] "GET /leverancier.php
> HTTP/1.1" 404 - "....
> In .htaccess heb ik staan:
> ErrorDocument 404 /404.php
> Toch krijg ik *niet* mijn 404.php te zien maar een IE-melding
> 'page not found'
Als er geen tussenkomst is van de server zelve is zou je 'Errordocument'
geen effect kunnen hebben. Zie ook de opmerkingen van Rene, die nuttig zijn.
Als je daar echt aan een uiteindelijke '404 redirect' [...] wilt vasthouden
kun je 't in je script bij bijv. een 'Moved Permanently' laten en de
'Location' van een 404 document geven.
WD
Rene Pijlman
07/12/05, 19:45
X-Newsreader: Forte Agent 1.93/32.576 English (American)
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
Lines: 28
NNTP-Posting-Host: 194.109.250.148
X-Trace: 1133980564 news.xs4all.nl 11063 [::ffff:194.109.250.148]:25689
X-Complaints-To: abuse@xs4all.nl
Xref: nl-news.euro.net nl.internet.www.server-side:39949
Warden Dave:
>Als er geen tussenkomst is van de server zelve is zou je 'Errordocument'
>geen effect kunnen hebben.
Oh ja, natuurlijk, daar dacht ik even niet aan. Een PHP-script die een
404-status retourneert is iets anders dan Apache die een niet-bestaande
URL constateert, daardoor zijn geconfigureerde 404-pagina retourneert met
een 404-status.
In het eerste geval is het script zelf verantwoordelijk voor de pagina, in
het tweede geval is Apache dat.
Als Apache op de aangegeven URL een PHP-script aantreft en activeert (en
Apache dus geen 404 constateert), en dat script besluit zelf tot een 404,
dan moet het ook zelf de gewenste inhoud (pagina) meesturen.
>Als je daar echt aan een uiteindelijke '404 redirect' [...] wilt vasthouden
>kun je 't in je script bij bijv. een 'Moved Permanently' laten en de
>'Location' van een 404 document geven.
Zo kan het ook. Iets minder netjes misschien, omdat je strikt genomen
browsers verzoekt een (gebookmarkte) URL te veranderen in een onjuiste
URL. Maar in de praktijk kom je hier vast wel mee weg.
--
René Pijlman
Wat wil jij worden? http://www.carrieretijger.nl
Warden Dave
07/12/05, 19:45
"Rene Pijlman" <reply.in.the.newsgroup@my.address.is.invalid> wrote:
> Warden Dave:
>>Als je daar echt aan een uiteindelijke '404 redirect' [...] wilt
>>vasthouden
>>kun je 't in je script bij bijv. een 'Moved Permanently' laten en de
>>'Location' van een 404 document geven.
>
> Zo kan het ook. Iets minder netjes misschien, omdat je strikt genomen
> browsers verzoekt een (gebookmarkte) URL te veranderen in een
> onjuiste URL. Maar in de praktijk kom je hier vast wel mee weg.
Voor de duidelijkheid: Ik bedoelde dan een '404 document' die wel die status
geeft (komt zo +- neer op het hebben van een 'Errordocument' voor 404 en een
niet bestaande 'Location' geven). Een client kan dan, via de omweg,
besluiten dat de oorspronkelijke URL niet meer geldig is.
groet,
WD