error 404 in index file

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Loek Lemmens

Loek Lemmens

05/06/2019 23:35:57
Quote Anchor link
Hallo,


Waar ik naar opzoek ben is hoe ik een error 404 document in de index file kan laden.
Ik ben het stoeien geweest met htacces maar dan redirect hij naar de 404 file en include deze niet.

htacces bestand staat in de root map en de 404 file in root/inc/errors/404.php
 
PHP hulp

PHP hulp

28/03/2024 20:17:38
 
Thomas van den Heuvel

Thomas van den Heuvel

06/06/2019 00:13:23
Quote Anchor link
Idealiter voer je de "rekensom" die bepaalt of een pagina bestaat of niet zelf uit in PHP-code, dan kun je namelijk op grond daarvan ook bepalen welke content je serveert. Als je hebt vastgesteld dat een URL niet bestaat in jouw webapplicatie, dan serveer je de bijbehorende 404 content. Het is dan ook verstandig om handmatig de HTTP response code in te stellen.

Een manier om het bovenstaande te bereiken is door alle requests door te sturen naar de centrale "ingang" in jouw webapplicatie (single point of entry), dit is meestal index.php. Vervolgens inspecteer je of de oorspronkelijke aanroep een bekende/bestaande pagina was. Deze kun je opvragen via $_SERVER['REQUEST_URI']. Vervolgens genereer je op grond hiervan een response: de content van de bijbehorende pagina, of een 404 pagina, uiteraard met bijbehorende HTTP headers (200 OK, 404 Not Found et cetera).

Hoe je e.e.a. implementeert in PHP en alles doorstuurt naar index.php (ook weer met .htaccess) kan bijvoorbeeld als volgt.

Het bovenstaande is slechts het begin, vervolgens ga je met $path aan de slag. Daarmee dien je te bepalen of dat applicatiepad bestaat en dien je de bijbehorende content te serveren.

Uiteraard bestaan hier legio variaties op die min of meer hetzelfde doen. Het principe is altijd hetzelfde: je delegeert het afhandelen van het opvragen+serveren naar de webapplicatie zelf.
Gewijzigd op 06/06/2019 00:26:53 door Thomas van den Heuvel
 
Rob Doemaarwat

Rob Doemaarwat

06/06/2019 07:01:44
Quote Anchor link
Maar praktisch:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if($deze_request_kan_ik_niet_vinden){
  http_response_code(404);
  include('inc/errors/404.php');
  exit();
}

?>
 
- Ariën  -
Beheerder

- Ariën -

06/06/2019 10:53:41
Quote Anchor link
Wat Rob en Thomas zeggen, doe ik ook.
maar voor het gemak gebruik ik ook nog eens .htaccess:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
ErrorDocument 401 /http_status_code?error=401
ErrorDocument 403 /http_status_code?error=403
ErrorDocument 404 /http_status_code?error=404
ErrorDocument 500 /http_status_code?error=500

Als iemand bijvoorbeeld een directory wilt bekijken (403), of tegen een bokkende server (500) aanloopt, dan gaat dit ook door mijn frameworkje heen. De werkelijke URL zie je niet, omdat een ErrorDocument (apache) niet doorstuurt maar een soort van includeert.

Maar 404's gaan geloof ik sowieso al door mijn framework, dus die regel zou als ik mijn niet vergis al overbodig moeten zijn.
Gewijzigd op 06/06/2019 10:54:42 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

06/06/2019 19:57:39
Quote Anchor link
> De werkelijke URL zie je niet, omdat een ErrorDocument (apache) niet doorstuurt maar een soort van includeert.
Dit is simpelweg een interne redirect in plaats van een externe, voor zover ik weet.

> Maar 404's gaan geloof ik sowieso al door mijn framework, dus die regel zou als ik mijn niet vergis al overbodig moeten zijn.
Er valt wel iets voor te zeggen om de headers op een enkele plaats op een uniforme manier te regelen, dus als je alles je code in kunt trekken verdient dat de voorkeur. Dit maakt je ook minder afhankelijk van webserver specifieke syntax/functionaliteit.
 
- Ariën  -
Beheerder

- Ariën -

07/06/2019 12:35:27
Quote Anchor link
Ja, dat klopt, ik gebruik in mijn framework een eigen class die de juiste foutmeldingen + header voorschotelt.
Hoewel het volgens mij zinniger is om http_response_code(...) te gebruiken. Volgens mij geeft deze meteen de juiste headers mee.
 
Thomas van den Heuvel

Thomas van den Heuvel

08/06/2019 19:55:31
Quote Anchor link
> Hoewel het volgens mij zinniger is om http_response_code(...) te gebruiken. Volgens mij geeft deze meteen de juiste headers mee.
Dat is dan de implementatie.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.