Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

template en 404 pagina

None
36 antwoorden
  • Hallo allemaal,

    ik heb nu voor een website een soort template systeem gemaakt waarbij gekeken wordt naar bijvoorbeeld www.website.nl/index.php?page=contact
    in mn index.php staat dan bovenaan het volgende….

    [code:1:1dfc3a9014]<?php

    $page = (isset($_GET['page'])) ? $_GET['page'] : '' ;

    switch(strtolower($page)) {
    case 'products':
    include('pages/products.php');
    break;
    case 'portfolio':
    include('pages/portfolio.php');
    break;
    case 'about':
    include('pages/about.php');
    break;
    case 'contact':
    include('pages/contact.php');
    break;
    default:
    include('pages/home.php');
    }

    ?>[/code:1:1dfc3a9014]

    Alleen als iemand een niet-bestaande pagina intoetst dan komt hij/zij standaard op de home pagina…. Is er een mogelijkheid om dan een 404-pagina weer tegeven als dit het geval is???
    Ik maak trouwens gebruik van mod_rewrite voor de url….mss dat dat een probleem is…
  • [code:1:5d89fb120e]<?
    if (empty($_GET['page'])) {
    $page="news.php"; }

    if ($_GET['page'] == 'news'){ $page="news.php"; }

    if ($_GET['page'] == 'compilers'){ $page="compilers.php"; }

    if ($_GET['page'] == 'articles'){ $page="articles.php"; }

    if ($_GET['page'] == 'team'){ $page="team.php"; }

    if ($_GET['page'] == 'links'){ $page="links.php"; }

    if ($_GET['page'] == 'forum'){ $page="/phpBB2/index.php"; }

    if (file_exists($page)){ include $page; }
    else{ include"404.php"; }
    ?>[/code:1:5d89fb120e]

    Is wat ik gebruik. Gaat dus voor jou vooral om regel 2 en 3 :
    [code:1:5d89fb120e]if (empty($_GET['page'])) {
    $page="news.php"; } [/code:1:5d89fb120e]
    en
    [code:1:5d89fb120e]if (file_exists($page)){ include $page; }
    else{ include"404.php"; }
    [/code:1:5d89fb120e]

    PS: Valt me nu op hoeveel php op C++ lijkt :o !! Enig idee hoe dat komt ?
  • :D :D :D

    Heel erg bedankt, je hebt me in de goede richting gezet. Dit is wat ik nu heb. Mss heb je er zelf ook wat aan….

    [code:1:2884241e51]<?php

    if (empty($_GET['page'])) {
    $_GET['page'] = '';
    }

    switch(strtolower($_GET['page'])) {
    case 'products':
    include('pages/products.php');
    break;
    case 'portfolio':
    include('pages/portfolio.php');
    break;
    case 'about':
    include('pages/about.php');
    break;
    case 'contact':
    include('pages/contact.php');
    break;
    case '':
    include('pages/home.php');
    break;
    default:
    include('errors/404.php');
    }

    ?>[/code:1:2884241e51]

    Ik had al eerder gevraagd over zo'n template systeem maar iedereen zei dat dat onveilig was enzo….Maar op deze manier lijkt het me toch vrij veilig…
  • Gebruik liever de HTTP 404 error in plaats van deze oplossing. En zorg dan dat je met .htaccess de locatie van die error weergeeft. Op die manier zorg je dat bots, zoals Google ook begrijpen dat de pagina niet bestaat.
  • Jah maar op de manier zoals ik pagina's include krijg je dus nooit een http 404 error….vandaar dat ik een andere oplossing zocht….

    Maar als jij een oplossing weet hoe ik mn standaard script zo verander dat er wel gewone http 404 foutmeldingen komen….GRAAG!!!
  • [code:1:b474772b49]header("HTTP/1.0 404 Not Found");[/code:1:b474772b49]
  • Ok, ik zal het even proberen duidelijk uit te leggen.

    Ik maak gebruik van mod_rewrite om mn url's te herschrijven.
    Je hebt bijvoorbeeld de pagina www.website.nl/contact. Deze wordt herschreven als www.website.nl/index.php?page=contact
    alles wat achter de slash staat (in dit geval contact) wordt dus de variabele page.

    Als ik dit dan bovenin index.php zet:
    [code:1:224eab3b06]<?php

    $page = (isset($_GET['page'])) ? $_GET['page'] : '' ;

    switch(strtolower($page)) {
    case 'products':
    include('pages/products.php');
    break;
    case 'portfolio':
    include('pages/portfolio.php');
    break;
    case 'about':
    include('pages/about.php');
    break;
    case 'contact':
    include('pages/contact.php');
    break;
    default:
    include('pages/home.php');
    }

    ?>[/code:1:224eab3b06]

    Dan wordt er natuurlijk nooit een 404 error gegenereerd. Want alle invoer verwijst uiteindelijk naar home.php….

    header("HTTP/1.0 404 Not Found"); is mooi maar waar zou ik dat dan kwijt moeten??? Want ik heb het al bij default geprobeert te zetten maar dan gebeurd er niks….
  • Je moet het helemaal bovenaan je pagina zetten. Daar heb je dan een scriptje die checkt of de pagina bestaat bijvoorbeeld:[code:1:25f4fedc19]if(file_exists("pages/".$page.".php")){
    $include = "blaatetc.";
    }
    else{
    header("HTTP/1.0 404 Not Found");
    }[/code:1:25f4fedc19]Die $include doe je dan later op de pagina, lijkt me makkelijk. In je .htaccess heb je dan iets van:[code:1:25f4fedc19]ErrorDocument 404 http://blaatpagina.nl/404[/code:1:25f4fedc19]En dan moet alles werken. Er kunnen syntaxfouten in bovenstaande zitten.
  • hmmm raar….Ik heb het net geprobeert maar mn 404 pagina wordt niet geladen als die header verstuurd wordt…
  • Staat alles in je .htaccess in de goede volgorde? mod_rewrite onderaan wil dat zeggen en dit bovenaan?

    En je hebt een volledige absolute URI gebruikt?
  • Wat is er eigenlijk zo fout aan mijn 404oplossing (2e post hierin) ?
  • Die is dus bot-onvriendelijk. En daarnaast kun je beter volgens standaarden werken (HTTP) dan je eigen dingen in elkaar frutselen. Je zou het dan ook niet meer een 404 pagina kunnen noemen, want dat verwijst naar de HTTP error.
  • [quote:e3ced2fb2e="turbo-pascal"]Wat is er eigenlijk zo fout aan mijn 404oplossing[/quote:e3ced2fb2e]De syntax ;)
  • Waarom kan dit niet gewoon?[code:1:f016fe0fde]<?php

    if (empty($_GET['page'])) {
    $_GET['page'] = '';
    }

    switch(strtolower($_GET['page'])) {
    case 'products':
    include('pages/products.php');
    break;
    case 'portfolio':
    include('pages/portfolio.php');
    break;
    case 'about':
    include('pages/about.php');
    break;
    case 'contact':
    include('pages/contact.php');
    break;
    case '':
    include('pages/home.php');
    break;
    default:
    header("HTTP/1.0 404 Not Found");
    include('errors/404.php');
    }

    ?>[/code:1:f016fe0fde]Wel zorgen dat er nog geen output naar de server is gestuurd voordat je een header verstuurt.

    - Bas
  • Hey Basje,

    Voorlopig heb ik em ook zo. Maar als ik met firefox de headers ga bekijken zie ik geen http 404 - file not found…..Of kan je dat zo niet zien….Want ik wil eigenlijk wel even zeker weten dat die header meegestuurd wordt….
  • Heb je liveheaders oid geinstalleerd? Daar kun je het zien.
  • Hey super handige extension zeg

    ik krijg nu dit als response [code:1:d9c2ce3a1a]HTTP/1.x 404 OK[/code:1:d9c2ce3a1a]

    Dus dat lijkt me in orde niet??? (ik gebruik het nu zoals Basje beschreef)
  • Helemaal in orde :wink:
  • [quote:9a166de670="stierenoog"]ik krijg nu dit als response [code:1:9a166de670]HTTP/1.x 404 OK[/code:1:9a166de670]Dus dat lijkt me in orde niet??? (ik gebruik het nu zoals Basje beschreef)[/quote:9a166de670]
    Hopelijk maak je een tipfoutje en bedoel je 200 OK (een 404 OK vind ik zeer onwaarschijnlijk). De oorzaak hiervoor heeft Bas al genoemd…
    [quote:9a166de670="BasHamar"]Wel zorgen dat er nog geen output naar de server is gestuurd voordat je een header verstuurt.[/quote:9a166de670]

    Op het moment dat je output verstuurt en er is geen HTTPheader gedeclareerd, dan wordt er automatische een '200 OK' mee gegeven.

    -Rémy
  • idd er is iets heel erg vreemds aan de hand… Want als de pagina wel gevonden kan worden krijg ik ook geen 200 OK… Soms zie ik een een 304 not modified ofzo…..hmmm erg vreemd….

    [Edit]Die 200 OK krijg ik nu wel dat werkt. Maar waarom ik een 404 OK krijg is me een raadsel. Het moet toch 404 Not Found zijn???
    Dit is wat ik mee stuur [code:1:6b5095b8cd]header("HTTP/1.0 404 Not Found");[/code:1:6b5095b8cd]

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.