Klaus01: Im WWW oder im lokalen System

Guten Abend, kann man über eine Abfrage in der .htaccess erkennen, ob man sich im Internet befindet oder auf dem lokalen Apache-System? Hintergrund: Lokal sind andere Abgaben nötig als im Internet, aber ich möchte nicht unterschiedliche .htaccess nachdem sonst alles identisch ist.

  1. Tach!

    kann man über eine Abfrage in der .htaccess erkennen, ob man sich im Internet befindet oder auf dem lokalen Apache-System?

    Ich nehme an, du meinst unterscheiden zu wollen, ob die Konfigurationsdatei auf einem bestimmten Server und nicht auf anderem zur Anwendung kommt. Seit Version 2.4 kann man mit <If> bedingte Bereiche definieren. Als Bedingung kann auch der Servername des VHosts vergleichen werden, zum Beispiel mit dem im Internet oder dem lokal verwendeten.

    dedlfix.

    1. Wenn ich unter Servername den Ausdruck www.example.com verstehe, so ist dieser doch identisch im lokalen System und in der Internet-Version.

      1. Tach!

        Wenn ich unter Servername den Ausdruck www.example.com verstehe, so ist dieser doch identisch im lokalen System und in der Internet-Version.

        Bei mir wäre er das nicht, sonst könnte ich beides nicht voneinander unterscheiden. Zudem müsste ich auch in meiner lokalen /etc/hosts (bzw. Windows-Pendant dazu) den Namen mit einer lokalen IP-Adresse überschreiben, um das dann wieder rauszunehmen, wenn ich den im Internet erreichen möchte. Viel zu umständlich, weswegen der Server lokal bei mir eher www.example.local heißt.

        Wie auch immer, wenn die Namen bei dir gleich sind, kannst du dir auch ein anderes Kriterium aus der Apache-Dokumentation herauziehen, das in deinem Fall eben unterschiedlich ist. Ansonsten müsstest du mal definieren, was in deinem Fall "im Internet" von "lokal" unterscheidet. Zur Not kannst du dir auch lokal eine Environment-Variable setzen und im <If> vergleichen.

        dedlfix.

  2. hi,

    kann man über eine Abfrage in der .htaccess erkennen, ob man sich im Internet befindet oder auf dem lokalen Apache-System?

    Möglicherweise.

    Hintergrund: Lokal sind andere Abgaben nötig als im Internet, aber ich möchte nicht unterschiedliche .htaccess nachdem sonst alles identisch ist.

    Nun, der Hintergrund ist schon klar. Aber ich würde diesbezügliche Abhängigkeiten nicht über die Serverkonfiguration regeln sonderen in meiner eigenen Konfiguration, also in der betreffenden Anwendung oder zentral übers Framework.

    Nicht umsonst gibt es private Adressräume für private Netze und für den Localhost sind 16 Millionen verschiedene IP Adressen möglich.

    Local kann man die Namen über die /etc/hosts auflösen und somit auch den lokalen Domänen private Namen geben. Was dann dazu führt, daß man im Apache mit VirtualHost arbeitet und der Apache schließlich diesen Teil der Konfiguration in der Serverumgbung preisgibt, die in jeder Anwendung zur Verfügung steht.

    MfG

    1. Tach!

      Nun, der Hintergrund ist schon klar. Aber ich würde diesbezügliche Abhängigkeiten nicht über die Serverkonfiguration regeln sonderen in meiner eigenen Konfiguration, also in der betreffenden Anwendung oder zentral übers Framework.

      Dinge, die Serverkonfiguration sind, können auch dort geregelt werden. Beispielsweise wird man lokal in der Testumgebung die Cache-Werte anders einstellen wollen. Sowas ist nicht Teil der Anwendung und muss dort nicht in Form von extra gesendeten Headern eingefügt werden.

      Local kann man die Namen über die /etc/hosts auflösen und somit auch den lokalen Domänen private Namen geben. Was dann dazu führt, daß man im Apache mit VirtualHost arbeitet und der Apache schließlich diesen Teil der Konfiguration in der Serverumgbung preisgibt, die in jeder Anwendung zur Verfügung steht.

      Da fängt es ja schon an, dass du die Serverkonfiguration individuell vornimmst. Warum dann nicht gleich alle Serverkonfiguration in selbiger erledigen, und die Anwendung da raushalten?

      dedlfix.

      1. hi,

        Da fängt es ja schon an, dass du die Serverkonfiguration individuell vornimmst. Warum dann nicht gleich alle Serverkonfiguration in selbiger erledigen, und die Anwendung da raushalten?

        Es gibt Anwendungen, die speichern Daten. Stell Dir mal vor, Du hast eine Anwendung auf http://exmple.org/shop.html und die soll im Testmodus Bestellungen in einer anderen DB speichern als im Produktionsbetrieb.

        Wie willst Du sowas über die Serverkonfiguration regeln? Noch dazu wenn der URL derselbe ist?

        MfG

        1. Tach!

          Da fängt es ja schon an, dass du die Serverkonfiguration individuell vornimmst. Warum dann nicht gleich alle Serverkonfiguration in selbiger erledigen, und die Anwendung da raushalten?

          Es gibt Anwendungen, die speichern Daten. Stell Dir mal vor, Du hast eine Anwendung auf http://exmple.org/shop.html und die soll im Testmodus Bestellungen in einer anderen DB speichern als im Produktionsbetrieb.

          Das ist ja auch nicht Server- sondern Anwendungskonfiguration, und gehört in den Zuständigkeitsbereich der Anwendung.

          Wie willst Du sowas über die Serverkonfiguration regeln? Noch dazu wenn der URL derselbe ist?

          Die Serverkonfiguration will ich in selbiger regeln, die Anwendungskonfiguration nicht unbedingt. Aber wenn man schon die hosts-Datei verbiegt, um einen externen Hostnamen intern verwenden zu können, kann man das auch gleich noch mit dem Hostnamen des Datenbankservers tun (wenn der Rest der Zugangsdaten gleich ist). Ich halte jedoch das Überschreiben von externen Domainnamen für keinen gescheiten Weg, den man sich dauerhaft in seiner Testumgebung antun sollte. Aber selbstverständlich ist das auch eine Möglichkeit, beispielsweise wenn man die Anwendung lokal auf den Einsatz in freier Wildbahn vorbereiten und testen möchte, ohne dass man das Original behelligt.

          Nichtsdestotrotz kann man auch in der Serverkonfiguration die Weichen für die Anwendung stellen. Es gibt die Möglichkeit, Umgebungsvariablen zu setzen, die man in der Anwendung abfragt. (Die Shopsoftware Magento geht zum Beispiel diesen Weg. Wenn man mehrere Shops auf eigenen VHosts und auch mit unterschiedlichem Aussehen und Inhalt über dasselbe Backend betreiben möchte, setzt man entsprechende Umgebungsvariablen, um Magento mitzuteilen, in welchen Shop der Kunde eingetreten ist.)

          dedlfix.

          1. @all: Ich suche eine für mich einfache Lösung. In .htaccess kenne ich mich ein wenig aus, an die Serverkonfiguration beim Hoster möchte/kann ich gar nicht herangehen und meine lokale Apache-Installation möchte ich auch nach Möglichkeit nicht verändern. Bin froh, dass ich sie zum Laufen gebracht habe.

            1. Tach!

              Ich suche eine für mich einfache Lösung.

              Ja, aber wenn wir dir konkret was raten sollen, müssen wir auch das Problem konkret verstehen (können). Das war bisher so allgemein gehalten, dass ich nur allgemeine Hinweise geben konnte. Bei konkreten Anwendungsfällen hingegen kann man am besten beurteilen, welche konkrete Lösung da angemessen ist.

              dedlfix.

          2. kann man über eine Abfrage in der .htaccess erkennen, ob man sich im Internet befindet oder auf dem lokalen Apache-System?

            Wenn sich eine solche Fallunterscheidung im Server selbst auswirken soll, gehört das selbstverständlich in die Serverkonfiguration.

            MfG

            1. Tach!

              kann man über eine Abfrage in der .htaccess erkennen, ob man sich im Internet befindet oder auf dem lokalen Apache-System?

              Wenn sich eine solche Fallunterscheidung im Server selbst auswirken soll, gehört das selbstverständlich in die Serverkonfiguration.

              Nichts anderes habe ich gesagt. Aber du zitierst hier den OP, und der hat sich noch nicht geäußert, was konkret er braucht, so dass wir vorläufig nur mit Wenns und Abers antworten können.

              dedlfix.

              1. Heue um 9:17 hatte ich mich doch geäußert. Ich möchte nach Möglichkeit nichts auf dem Server machen. Über eine Abfrage in .htaccess möchte ich erkennen, ob ich im Internet bin oder auf meinem lokalen Apache. D.h. gibt es eine Variable, die im Internet definiert ist und nicht im lokalen System oder umgekehrt. Oder gibt es eine Variable, die garantiert unterschiedlich ist zwischen den beiden Varianten?

                1. Tach!

                  Heue um 9:17 hatte ich mich doch geäußert. Ich möchte nach Möglichkeit nichts auf dem Server machen.

                  Zu wenig, um konkrete Tipps zu geben.

                  Über eine Abfrage in .htaccess möchte ich erkennen, ob ich im Internet bin oder auf meinem lokalen Apache.

                  Es gibt keine Unterscheidung zwischen Internet und lokal. Dein lokales Netzwerk ist Teil des Internets, auch wenn eine Firewall den Zugriff verhindert. Zudem verwendet der lokale Teil des Netzwerkes dieselben Techniken wie das Internet. Es gibt auch keine Stelle, die man befragen kann, ob du in diesem oder jenen Teil des Netzwerks befindest.

                  D.h. gibt es eine Variable, die im Internet definiert ist und nicht im lokalen System oder umgekehrt.

                  Nein.

                  Oder gibt es eine Variable, die garantiert unterschiedlich ist zwischen den beiden Varianten?

                  Vielleicht. Aber das ist abhängig von den konkreten Gegebenheiten. Üblicherweise hat man im lokalen Netzwerk eine andere Domain als außerhalb, und damit andere Servernamen. Anhand dieser kannst du eine Unterscheidung vornehmen. Allerdings nur, wenn du das auch wirklich so hast und nicht intern denselben Namen wie extern verwendest.

                  Weiterhin gibt es auch Netzwerke, die verwenden auch intern dieselbe offizielle Domain, dann aber auch mit unterschiedlichen Hostnamen für interne und externe Server.

                  Wenn bei dir der interne und der externe Server dieselben Namen haben, dann geht es nicht anders, als ein anderes Kriterium heranzuziehen. Die IP-Adresse geht meines Wissens nicht, oder ich habe sie nur nicht in der List der Variablen zu <If> gefunden. Du könntest die IP-Adresse des Zugreifenden (REMOTE_ADDR) auswerten, beziehungsweise signifikante Teile davon, wenn das ein eindeutiges Unterscheidungsmerkmal in deinem Fall ist.

                  Umgebungsvariable setzen hab ich auch schon genannt. Das ist eine der am wenigsten eingreifenden Varianten, dafür aber recht wirkungsvoll.

                  dedlfix.

                2. Hallo Klausi01,

                  es geht Dir also um die Trennung zwischen Entwicklungs- und Produktiv-Umgebung. Das Problem habe ich im Beruf auch, allerdings mit Entwicklung, DV-Test, FA-Test, Abnahme und Produktion, also 5 Ungebungen 😀

                  Wir lösen das durch Stage-spezifische Konfigurationsdateien. In der Entwicklungsumgebung liegt an der Stelle des Projektes, wo die Config-Datei erwartet wird, die Developer-Version. In einem Config-Ordner liegen die Stage-spezifischen übrigen Dateien. Beim Deployment wird die Developerdatei liegen gelassen und statt dessen die für diese Stage richtige Datei verwendet.

                  .htaccess ist nur eine von mehreren möglichen Stellen, die umgebungsspezifisch sind. Die .htaccess gehört meiner Meinung auch nicht direkt zum Projekt, sondern zur Einbettung des Projekts ins Zielsystem. Insofern ist es durchaus legitim, sie separat zu halten und nicht als Teil des Deployment anzusehen. Sprich: Beim Upload auf den Server nicht eins-zu-eins aus dem Entwicklerordner mitzunehmen, sondern aus einer anderen Quelle zuzusteuern. Sowas kann man scripten (das WIE hängt von deiner Entwicklungsumgebung ab).

                  Und dann hast Du auch nicht die Notwendigkeit, sie gleich zu halten. Gleich halten ist kein gutes Ziel. Eine produktive Konfiguration sollte so geradlinig, sauber und lesbar wie möglich sein. Entwickler-Einstellungen, die im Produktionsbetrieb irgendwie abgeklemmt werden, haben in der Produktion nichts zu suchen. Ein Fehler, und sie sind plötzlich doch aktiv. Und die Produktion ist auf einmal kaputt.

                  Rolf

                  --
                  sumpsi - posui - clusi
                3. Heue um 9:17 hatte ich mich doch geäußert. Ich möchte nach Möglichkeit nichts auf dem Server machen. Über eine Abfrage in .htaccess möchte ich erkennen, ob ich im Internet bin oder auf meinem lokalen Apache.

                  .htaccess ist Serverkonfiguration.

                  Soll der Server was machen, wenn bestimmte Fälle eintreten? Dann wäre die Lösung in der Serverkonfiguration bzw. .htacces anzusiedeln.

                  Ansonsten ist es Sache der Anwendung. MfG

  3. Mindestens die beiden Variablen

    $_SERVER['DOCUMENT_ROOT'] $_SERVER['SCRIPT_FILENAME']

    dürften sich zwischen den beiden Installationen unterscheiden!

    1. Mindestens die beiden Variablen

      $_SERVER['DOCUMENT_ROOT'] $_SERVER['SCRIPT_FILENAME']

      dürften sich zwischen den beiden Installationen unterscheiden!

      Aber nur wenn auf einem der Systeme ein Laufwerksbuchstabe im Spiel ist. Ansonsten wird man eher anstreben daß es ebenda keine Unterschiede gibt.

      MfG

    2. Super, das passt! Danke

    3. Hallo, mich würde interessieren, wie so eine Abfrage in .htaccess aussieht. Also das entsprechende für if (substr($SERVER...,1,2) eq "c:') then ... else ....