Если ваш сервер поддерживает включение на стороне сервера (SSI), то в качестве ErrorDocument вы используете следующее 404.shtml
:
<html>
<header>
<meta http-equiv="Refresh" content="0; url=/index.php?uri=<!--#echo var="REQUEST_URI" -->">
</header>
</html>
РЕДАКТИРОВАТЬ: есть более простой способ: создать файл PHP в качестве своего ErrorDocument, и вы можете делать в нем все что угодно! :)
EDIT2: вы можете получить доступ к исходному URI, используя $_SERVER['REQUEST_URI']
EDIT3: черт, если вы просто перенаправляете на index.php
на том же хосте, вы можете просто установить этот файл index.php
в качестве ErrorDocument и определить, перенаправлен ли запрос с ошибки 404, проверив, если $_SERVER['REDIRECT_STATUS'] == '404'