Dieter Raber: Wie sagt man if else in apache?

Beitrag lesen

Hallo,

Ich beziehe mich im folgenden auf PHP als serverseitige Sprache und Apache 2.x als Server.

Entwicklungs- und finale Versionen von Webseiten unterscheiden sich ja durch Dinge wie unterschiedliche Error-Settings und solchen Sachen. Die Grundidee ist es, eine Anwendung mit moeglichst wenigen Aederungen der Konfiguration auf beiden Servern bereitzustellen,

Um herauszufinden, ob eine Seite lokal oder auf einem entfernten Server laeuft, habe ich bisher zwei Varianten verwendet:

1. Den Server mit -D IS_LOCAL gestartet und darauf dann via
  <IfDefine IS_LOCAL>
    SetEnv IS_LOCAL true
  </IfDefine>
  auf das Ergebnis zugegriffen.

2. Im PHP-Script mit den verschiedenen IP-Bereichen, die fuer lokale Netze reserviert sind, jongliert, das sieht etwa so aus:

  public static function isRemote() {  
    $ip_arr = explode('.', $_SERVER['SERVER_ADDR']);  
    if($ip_arr[0] == 10  
       || ($ip_arr[0] == 192 && $ip_arr[1] == 168)  
       || ($ip_arr[0] == 172 && $ip_arr[1] >= 16 && $ip_arr[1] <= 31)  
       || $_SERVER['SERVER_ADDR'] == '127.0.0.1') {  
      return false;  
    }  
    return true;  
  }

Beide Versionen sind in ihrem Wirkungsgrad beschraenkt, Version 1 geht solange gut, wie IS_LOCAL wirklich auf jeder Entwicklungsmachine gesetzt ist, Version 2 scheitert zum Beispiel, wenn SERVER_ADDR aufgrund irgendeiner Sicherheitseinstellung im vorgenannten IP-Range liegt. Zudem gestattet mir die PHP-Version keine weiteren Servermanipulationen.

Ich ueberlege jetzt, in der .htaccess ohne irgendwelche Vorbedingungen, wie zB. dem -D parameter
SetEnv IS_REMOTE true
zu setzen, was man dann einfach ein-/auskommentieren koennte, sodass man via <IfDefine> darauf zugreifen koennte. Aus verschiedenen Gruenden waere mir aber sowas wie <If IS_REMOTE == true> lieber.

Meine Fragen:

  • Kann man mit Apache sowas wie <If IS_REMOTE == true> machen?
  • Hat jemand bessere Konzepte, um herauszufinden, ob eine Application remote oder local ist (eigentlich interessiert mich das noch mehr)?

Danke fuer Eure Antworten

Dieter