Sinnvoll wäre daher natürlich wenn in seiner Adressleiste dann auch das nun richtige "www.meinedomain.com/index.php" erscheinen würde.
ok... Ich habe das jetzt NATÜRLICH NICHT durchgetestet. Die folgenden Beispiele können also kleine Fehler enthalten.
=====================================================
Variante 1 mit unsichtbarer, falscher URL und SESSION:
Schritt 1 (.htaccess, Anweisung, den Request mit /ERR404.php abarbeiten):
RewriteEngine on
#####################################
## Nach allen anderen Umleitungen! ##
#####################################
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /ERR404.php [L]
Schritt 2: (ERR404.php) Variante 1:
----------------------------------
<?php
session_start();
$_SESSION['REDIRECT_URL']=$_SERVER['REDIRECT_URL'];
# was immer Du noch willst, aber keine Ausgaben!
# Abschließende Weiterleitung
header('Location: http://' . $_SERVER['SERVER_NAME'] . '/index.php');
----------------------------------
Schritt 3: (index.php): Variante 1:
<?php
# Vorher keine Ausgaben senden:
session_start();
# was immer Du noch willst
if ( isset($_SESSION['REDIRECT_URL']) ) {
# was immer Du noch willst
# $_SESSION['REDIRECT_URL'] enthält, was Du suchst
# Löschen, damit die Info beim nächsten Aufruf weg ist:
unset($_SESSION['REDIRECT_URL']);
# oder sogar: Vollständiges Löschen der gesamten Session in 3 Schritten:
# // a) Löschen aller Session-Variablen.
# $_SESSION = array();
# // b) Session-Cookie.
# if (ini_get("session.use_cookies")) {
# $params = session_get_cookie_params();
# setcookie(session_name(), '', time() - 42000, $params["path"],
# $params["domain"], $params["secure"], $params["httponly"]
# );
# }
# // c) Löschen der Session auf dem Server:
# session_destroy();
}
=====================================================
Variante 2 mit unsichtbarer, falscher URL und Cookie:
Schritt 1 (.htaccess, Anweisung, den Request mit /ERR404.php abarbeiten):
RewriteEngine on
#####################################
## Nach allen anderen Umleitungen! ##
#####################################
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /ERR404.php [L]
Schritt 2: (ERR404.php) Variante 1:
----------------------------------
<?php
$_COOKIE['REDIRECT_URL']=$_SERVER['REDIRECT_URL'];
# was immer Du noch willst, aber keine Ausgaben!
# Abschließende Weiterleitung
header('Location: http://' . $_SERVER['SERVER_NAME'] . '/index.php');
----------------------------------
Schritt 3: (index.php): Variante 1:
<?php
# Vorher keine Ausgaben senden:
# was immer Du noch willst
if ( isset($_COOKIE['REDIRECT_URL']) ) {
# was immer Du noch willst
# $_COOKIE['REDIRECT_URL'] enthält, was Du suchst
# Cookie löschen, damit die Info beim nächsten Aufruf weg ist:
setcookie ('REDIRECT_URL', '', time() - 3600);
}
=====================================================
Variante 3 mit sichtbarer falscher URL
Schritt 1 (.htaccess, Anweisung, den Request mit /index.php abarbeiten):
RewriteEngine on
#####################################
## Nach allen anderen Umleitungen! ##
#####################################
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?Err=$1 [L,R=301] # wenn permanent - sonst 302!
Schritt 2: (index.php)
----------------------------------
<?php
if ( isset($_GET['Err']) ) {
#was immer Du dann tun willst, wenn wegen der
#nicht existierenden Ressource umgeleitet wurde
}?>
Jede dieser Varianten hat Vor- und Nachteile. 1 und 2 bedingen Cookies und eine etwas höhere Serverlast (auch das Session-Cookie ist eines) bei Variante 3 bleibt der vorherige Request dennoch als Teil der URL sichtbar. Wenn Du nichts davon willst verzichte auf die Forderung.