Dommerik van dienst

Pffff… ik zal het wel allemaal helemaal verkeerd doen, en dat is wat er gebeurt als een mens begint te prutsen in een programma dat hij niet kent, in een omgeving die hij niet gewoon is, met een taal die hij al geen vijf jaar meer boven gehaald heeft en zonder te weten wat of hoe.

De situatie: ik krijg een URL van de vorm “website/dir1/file1.html”. Ik heb een tabelletje in een database waar die URL eventueel verbonden wordt met een URL van de vorm “website/dir2/file2.html”. WordPress stuurt standaard zijn 404s naar een 404.php in de templatedirectory.

Ik dus naar die 404.php, en daar zet ik het volgende in:

<?php
 $fromURL=$_SERVER[‘REQUEST_URI’];
 global $wpdb;
 $redirs = $wpdb->get_results("select toURL from tblRedirects where fromURL = ‘$fromURL’");
 if (count($redirs)==1) {
  Header("location: ".$redirs[0]->toURL);
  exit;
 }
?> <?php get_header(); ?>
<h2>Error 404 – Not Found</h2>
<?php get_footer(); ?>

Allemaal proper en simpel, en dat werkt precies zoals het zou moeten, behalve dat het niet werkt. Dus de header wordt wel gezet, maar toch doet het niets. Als ik navigeer naar http://website/2005/10/apple_wast_witt.html, en ik bekijk de response headers, dan staat daar proper tussen

Location: http://website/2005/10/apple-wast-witter.html

…maar hij doet helemaal niets. Dedju, een gewone Response.Redirect is toch een heel eind gemakkelijker. 🙂

Zet ik in de plaats van de header stomweg

echo("<meta http-equiv = refresh content=0;url=".$redirs[0]->toURL.">");

dan werkt het voor de menselijke bezoeker wél zoals het zou moeten, maar niet voor Google natuurlijk. En niet voor Internet Explorer, die stomweg blijft staan op een 404. Bah. Verder zoeken.

Doe mee met de conversatie

5 reacties

  1. Al eens geprobeerd om toch wat HTML terug te sturen, samen met de Location: header? Dus gewoon de pagina eigenlijk, met de extra header.

    Met andere woorden, zonder de exit() achter de header().

Laat een reactie achter

Zeg uw gedacht

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.