Jörg Reinholz: Apache-Rewrite und PHP-Zugriff auf vorige URL

Beitrag lesen

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.

Jörg Reinholz