Sven: .htaccess Umleitung will nicht

Hallo,

was ist falsch an meiner Umleitung?

Sie leitet einfach nicht um:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.my-domain\.de$ [NC]
RewriteRule ^(.*)$ http://%1.mydomain.de/$1 [R=301,L]
  1. Sie leitet einfach nicht um:

    Ok in diesem Fall hatte ich mir eine IP Sperre eingehandelt, daher tat sich nichts.

    Dennoch gelingt es mir nicht, so umzuleiten, wie ich will:

    aus

    egalwas.my-domain.de/egalwelchesverz/egalwelchedatei.egalwelcheendung?parm1=test&param2=test2
    

    soll

    egalwas.mydomain.de/egalwelchesverz/egalwelchedatei.egalwelcheendung?parm1=test&param2=test2
    

    werden.

    Und das bekomme ich nicht hin.

    Sven

    1. Lieber Sven,

      wenn URL-Parameter auch noch weitergeleitet werden sollen, dann brauchst Du query string append dazu.

      Was soll eigentlich das %1 als neue Subdomain? Will das ein $1 sein?

      Liebe Grüße

      Felix Riesterer

      1. Moin,

        wenn das %1 eigentlich ein $1 sein sollte, was logisch erscheint, dann ist noch das ursprüngliche $1 fragwürdig, weil es den Hostnamen matcht und nicht den Pfad.

        Viele Grüße
        Robert

        1. Hallo Felix und Robert,

          es kann logisch sein, dass $1 gemeint war. Ist es hier aber nicht.

          $1 und %1 werden beide von Apache erkannt, haben aber unterschiedliche Bedeutung.

          In addition to plain text, the Substitution string can include

          • back-references ($N) to the RewriteRule pattern
          • back-references (%N) to the last matched RewriteCond pattern

          (Quelle: Apache Docs)

          Das %1 ist also die im RewriteCond erkannte Subdomain, und $1 der in der RewriteRule gematchte Pfad.

          Rolf

          --
          sumpsi - posui - obstruxi
    2. Da Du gar nichts konkretes darüber schreibst, was aus welchen Bemühungen bisher resultiert, und weil ich nichts über Deinen Wissensstand und Deine Tests weiß, kann es sein, dass ich Fragen stelle, die Dich befremden - es ist aber notwendig erst mal zu sehen was wir haben - und dann was wir machen können.

      Und das bekomme ich nicht hin.

      Hm. Womöglich liegt das Problem auch an anderer Stelle. Gehen wir es von der Wurzel an und schauen wir nach, was wirklich passiert.

      Du schreibst „.htaccess“.

      1. Dazu müsste das DNS passend konfiguriert sein.

      2. Es müsste der (erreichbare) Server erst einmal so konfiguriert werden, dass er - bleiben wir vorerst(¹) bei Deinen Beispielen - auf einen Aufruf von „egalwas.my-domain.de“ überhaupt auf die .htaccess zugreift, also in der Server-Config das passende Wurzelverzeichnis haben und

      3. die .htaccess muss zudem überhaupt „angefasst“ werden.

      Ein erster, zielführender Test wäre, wenn Du uns die Ausgaben von

      wget -d http://egalwas.my-domain.de
      

      ODER

      curl -v http://egalwas.my-domain.de
      

      (ohne das HTML - aber die HTTP-Header) zeigst. curl ist bei modernen Windows-Versionen angeblich an Board. wget gibt es zur Not auch für Windows.

      Übrigens „http“ - wenn Du das nicht sehr explizit angibst rufen aktuelle Browser statt dessen „https://egalwas.my-domain.de“ ab.

      Ebenfalls zielführend:

      Hast Du Zugriff auf das Logfile des Servers? Und das Error-Log? Dann zeige uns auch die zu den Abrufen passenden Zeilen.


      ¹)

      host egalwas.my-domain.de
      egalwas.my-domain.de mail is handled by 5 smtpin.rzone.de.
      
      host my-domain.de
      my-domain.de has address 81.169.145.77
      my-domain.de has IPv6 address 2a01:238:20a:202:1077::
      my-domain.de mail is handled by 5 smtpin.rzone.de.
      
      host mydomain.de
      mydomain.de has address 81.169.145.84
      mydomain.de has IPv6 address 2a01:238:20a:202:1084::
      mydomain.de mail is handled by 5 smtpin.rzone.de.
      

      Womöglich hast Du schon hier eine falsche Vorstellung, welcher Server „antelefoniert“ wird...

      1. Hallo an Dich und die anderen Antworter,

        Hm. Womöglich liegt das Problem auch an anderer Stelle. Gehen wir es von der Wurzel an und schauen wir nach, was wirklich passiert.

        Du schreibst „.htaccess“.

        1. Dazu müsste das DNS passend konfiguriert sein.

        2. Es müsste der (erreichbare) Server erst einmal so konfiguriert werden, dass er - bleiben wir vorerst(¹) bei Deinen Beispielen - auf einen Aufruf von „egalwas.my-domain.de“ überhaupt auf die .htaccess zugreift, also in der Server-Config das passende Wurzelverzeichnis haben und

        Das verstehe ich.

        1. die .htaccess muss zudem überhaupt „angefasst“ werden.

        Klar.
        Das wird sie aber, denn derzeit habe ich, weil die Umleitung per Rewrite-Rule nicht funktionierte, alle Anfragen auf eine index.php geleitet und leite per php header-location um, was auch wunderbar funktioniert.

        Trotzdem fände ich interessant, herauszufinden, warum die Rewrite-Umleitung nicht gegriffen hat gestern.

        Ein erster, zielführender Test wäre, wenn Du uns die Ausgaben von

        wget -d http://egalwas.my-domain.de
        

        ODER

        curl -v http://egalwas.my-domain.de
        

        (ohne das HTML - aber die HTTP-Header) zeigst. curl ist bei modernen Windows-Versionen angeblich an Board. wget gibt es zur Not auch für Windows.

        Ich habe die Möglichkeit, über ein Ubuntu-Linux zuzugreifen.

        Übrigens „http“ - wenn Du das nicht sehr explizit angibst rufen aktuelle Browser statt dessen „https://egalwas.my-domain.de“ ab.

        Warum ist http hier wichtig?

        Ebenfalls zielführend:

        Hast Du Zugriff auf das Logfile des Servers? Und das Error-Log? Dann zeige uns auch die zu den Abrufen passenden Zeilen.

        Leider nicht.
        Ich habe zwar Zugriff auf den apache-error-log, aber der kann niemals wirklich vollständig sein. Denn ich bin gestern 2 x in eine IP-Sperre seitens des Providers hinein gelaufen und der versuchte Zugriff auf fehlende Scripte nicht im Error-Log.

        Was die Ausgabe angeht, müssen wir bin morgen warten, denn derzeit habe ich die gestern nicht funktionierende Umleitung ja durch o.g. KOmbi aus .htaccess und index.php ersetzt.

        Sven

        1. denn derzeit habe ich die gestern nicht funktionierende Umleitung ja durch o.g. KOmbi aus .htaccess und index.php ersetzt.

          Ok. Erste Unfallursache (DNS) ist also ausgeschlossen. Zweite Unfallursache (ignorierte .htaccess) demnach wohl auch. (Ich kenne Deine Tests nicht...)

          KOmbi aus .htaccess und index.php

          Tipp: Nichts im Verzeichnis außer der index.php und der .htaccess und die index.php in der .htaccess auch als ErrorDocument eintragen:

          ErrorDocument 404 /index.php
          

          Stellt sich übrigens die Frage, ob mod_rewrite geladen ist. Aber wenn nicht installiert bzw. geladen und das Nichtladen nicht mit ...

          <IfModule mod_rewrite.c>
              RewriteEngine On
              #...
          </IfModule>
          

          ... abgefangen wurde müsstest Du 500er bekommen. Siehst Du aber nur im Standard-Apache-Log oder Netzwerk-Tool der Entwicklerwerkzeuge (oder mit wget bzw. curl) weil Dein in Deiner php.ini bestelltes error-log natürlich nur für php gilt. Ein CustomLog kannst Du ja leider nicht setzen - das geht nur in der Konfiguration des Servers bzw. „virtuellen Hosts“.

          Ich habe die Möglichkeit, über ein Ubuntu-Linux zuzugreifen.

          Geht auch mit Windows. Ich wechsle aus Gründen, die ich für „gute“ halte, grad von Xubuntu (Ubuntu mit XFCE4) zu Debian mit XFCE4. Grund: Snaps, zurückgehaltene Updates…

          1. Ob ein Apache Modul (hier: rewrite) zur Verfügung steht kannst Du mit

            <?php phpinfo();
            

            herausfinden. Ist die Funktion verboten (das gibt es meiner Erfahrung nach), dann eben mit meinem „schicken“ phpinfo()-Replacment: Unter „Apache-Informationen“. Die im Beispiel zu sehenden Ausgaben gelten natürlich für meinen Server…

  2. was ist falsch an meiner Umleitung?

    Der simpelste, schmutzigste und schnellste Test: bau mal absichtlich einen Syntaxfehler in die .htacces ein und schau, ob Du dann beim Testen einen "Internal Server Error" bekommst.

    Falls nein, dann kannst Du in die .htacces reinschreiben, was Du möchtest. Es wird nur keinen Effekt haben.