ebody: htaccess mod_rewrite - Host umschreiben, wenn localhost

Hallo,

ich verwende an verschiedenen Stellen eine absolute URL, u.a.

<base href="https://www.example.com/de/" target="_top">

Aber auch an anderen Stellen, wo u.a. per PHP URL´s generiert werden. Eine relative URL möchte ich an manchen Stellen wie <base href...> vermeiden, um sicher zu stellen, dass die URL stimmt. Mag für einige nicht sinnvoll erscheinen, aber das ist ein anderes Thema.

Ich teste es erst immer lokal, wenn ich es dann online stelle, muss ich überall erst die Pfade anpassen. Das ist aufwendig und es können sich schnell Fehler einschleichen. Daher würde ich das gerne vermeiden.

Mit mod_rewrite möchte ich folgendes erreichen:

Wenn der Host = localhost ist, wird jede URL mit dem Host www.example.com in localhost... umgeschrieben.

Versucht habe ich es u.a. mit:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^localhost$

RewriteRule ^www.example.com$ http://localhost/ [L]

Das funktioniert aber leider nicht. Kann jemand helfen?

Gruß ebody

  1. Kann jemand helfen?

    Nicht wirklich. Es macht keinen Sinn, erst das Zündkabel abzuziehen um es dann bei jeder (Zweitakter) oder jeden zweiten Umdrehung (Viertakter) an die Kerze zu halten, damit der Motor läuft. Ebenso erscheint es nicht sinnvoll, hierfür eine Mechanik zu bauen.

    Wenn der Host = localhost ist, wird jede URL mit dem Host www.example.com in localhost... umgeschrieben.

    Du willst die URL in Links, src-Angaben für Stylesheets, Skripte, Grafiken umbauen. Das ist, naja, Unsinn. Wenn Du das gegen jeden guten Rat willst, dann benutze etwas wie PHP für solchen Murks:

    <?php
    if ( isset ( $_SERVER['HTTPS'] ) && 'on' = $_SERVER['HTTPS'] ) {
        $protocol = 'https';
    } else {
        $protocol = 'http';
    }
    if ( isset ( $_SERVER['HTTP_HOST'] ) ) {
        $ProtocolAndHost = $protocol . '://' . $_SERVER['HTTP_HOST'];
    } else {
        $ProtocolAndHost = "[LOKALER ABRUF]"; 
    }
    ?>
    <html>
    <head>
         <base href="<?=$ProtocolAndHost; ?>/de/">
         <base target="_top">
         <link rel="stylesheet" href="<?=$ProtocolAndHost; ?>/skins/foo/style.css">
    </head>
    
    
    <a href="foo/bar.php">Foo-Bar!</a>
    <img src="<?=$ProtocolAndHost; ?>/img/foo.img">
    

    Das Ergebnis könnte wie folgt aussehen:

    <html>
    <head>
         <base href="http://localhost/de/">
         <base target="_top">
         <link rel="stylesheet" href="http://localhost/skins/foo/style.css">
    </head>
    
    
    <a href="foo/bar.php">Foo-Bar!</a>
    <img src="http://localhost/img/foo.img">
    

    oder, auf einem Server der sich selbst als "www.example.org" kennt und https unterstützt und via https abgefragt wird:

    <html>
    <head>
         <base href="https://www.example.org/de/">
         <base target="_top">
         <link rel="stylesheet" href="https://www.example.org/skins/foo/style.css">
    </head>
    
    
    <a href="foo/bar.php">Foo-Bar!</a>
    <img src="https://www.example.org/img/foo.img">
    

    Bitte akzeptiere, dass ich mir für etwas, was ich für "Murks" halte nicht auch noch viel Mühe gebe.

    Du brauchst (jeweils) einen Host, der PHP kann und müsstest die Dateien von *.html in *.php umbenennen. (Letzteres kann man auch anders machen, aber dann wird es noch mehr Murks!)

    B.T.W. Wozu brauchst Du <base target="_top">? verwendest Du Frames? Das ist "sowas von 1999"

  2. hallo

    Mit mod_rewrite möchte ich folgendes erreichen:

    mod-rewrite kann nur urls von Requests umschreiben, die ihn überhaupt erst erreichen.

    Das heisst, htacces auf Server X kann nur Requests auf Server X behandeln.

  3. @@ebody

    Eine relative URL möchte ich an manchen Stellen wie <base href...> vermeiden, um sicher zu stellen, dass die URL stimmt.

    ?? Warum auch immer.

    Dir ist bewusst, dass es neben vollständigen URLs und und relativen Pfadangaben noch weitere Möglichkeiten zum Referenzieren gibt?

    Sind absolute Pfadangaben nicht was für dich?

    URL´s

    Aua. Ein Akzentzeichen ´ ist kein Apostroph ’. Und bei URLs kommt überhaupt kein Deppenapostroph hin.

    LLAP 🖖

    --
    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann