Raketenwilli: Es gibt nichts Neues unter der Sonne ...

Beitrag lesen

Anschließend dachte ich, Punkt 2 hiermit abzudecken, aber das klappt nicht:

rewriteCond %{HTTP_HOST} example.com
RewriteRule (.*)$ https://example.com#$1

Was mache ich da falsch?

Du weißt nicht was Du tust. Das würde immer wieder neu umleiten. Mein Vorschlag war ein Skript.

Es folgt ein Beispiel:

Also in .htaccess:

ErrorDocument 404 /search.php

Damit wird die search.php immer gestartet, wenn die angeforderte Seite nicht als Dokument bzw. Ressource existiert und wird mit allen notwendigen Daten gefüttert.

Die kann dann z.B. so aussehen (ich hab das nicht getestet, es ist aber trivial genug um wahrscheinlich zu funktionieren):

<?php

# Array mit alten und neuen URIs:

$Forwards['/test']     = '/index.php#test';
$Forwards['/foo.html'] = '/index.php#foo';
$Forwards['/bar.html'] = '/zur_bar.html';

# Run!

if ( isset( $Forwards[$_SERVER['REQUEST_URI']] ) ) {
     http_response_code( 301 );
     header( 'Location: ' . $Forwards[$_SERVER['REQUEST_URI']] );
     exit;
}
http_response_code( 404 );
?>
<!DOCTYPE html>
<html lang="de">
  <body>
    <h1>Error 404</h1>
    <hr>
    <p>Oops. Die angeforderte Seite wurde nicht gefunden.</p>
  </body>
</html>

Die Suche und die Antwort lassen sich auf (Beispiel → ) mannigfaltige und (Theorie → ) phantastische Weise erweitern...