IP-Sperren für bestimmte (Drupal-)Verzeichnisse in der .htaccess

Um Content-Management-Systeme wie Drupal abzusichern, macht es Sinn, dass Backend zur Pflege und Verwaltung nur bestimmten IP-Bereichen zugänglich zu machen. Eine Möglichkeit für jedes nahezu jedes CMS besteht darin, dies über die Apache-Konfiguration in der .htaccess durchzuführen, sofern das Apache-Modul mod-rewrite aktiviert ist. Wir leiten jede nicht zulässige IP-Adresse auf eine Fehlerseite (403) weiter. Ich zeige das hier mal an einem Beispiel für Drupal 7 und einer aktuellen Apache-Version (>2.4.x):

Seit der Apache 2.4 Version kann man für größere IP-Bereiche die CIDR  Schreibweise verwenden. Eine Seite zur Berechnung der IP-Bereiche findet man unter mxtoolbox oder jodies, letzterer sieht ein wenig altbacken, dafür aber übersichtlicher aus.

Befindet sich auf dem Server noch eine ältere Apache Version, z. B. 2.2.x, dann könnt ihr die RewriteCond expr so nicht verwenden. In diesem Fall sieht die Konfiguration folgendermaßen aus:

Und dann existiert noch ein Sonderfall, der ab und an bei größeren Server-Farmen, gerade bei größeren Firmen vorkommen kann, die Seiten werden über einen Proxy-Server aufgerufen und die Remote-IP Adresse (%{REMOTE_ADDR}) ist deshalb für alle Besucher die selbe. In diesem Fall muss man die X-FORWARDED-FOR Server-Variable abrufen. Das Beispiel sieht dann folgendermaßen aus (Apache > 2.4.x):

Und für den Apache bis 2.2.x:

Gerade die beiden letzten Beispiele haben mir bei einigen Server-Konfigurationen etwas Kopfzerbrechen bereitet. Ich hoffe, es hilft dem einen oder anderen weiter.

Anzeigen von verwandten Taxonomy-Begriffen des angezeigten Nodes in View Filter

Letztens musste ich für eine Produkt-Detailseite alle verwandten Produkte in einer Blockview anhand bestimmter Taxonomien anzeigen. Nun kann man sich bei Drupal schnell in eine Sackgassen konfigurieren und man möchte frustriert aufgeben, oder den Umweg über eine programmatische Lösung gehen, denn zu zahlreich sind die Einstellungsmöglichkeiten, gerade im Views-Modul.

Es gibt hierfür eine Lösung, sich entsprechendes Verhalten im Backend zusammen zu klicken, wenn man sich durch das Wording in Drupal nicht verwirren läßt.

Und so geht´s:

1. Fügt eine Relationship zu eurer View hinzu: „Content. Taxonomy terms on node
2. Fügt einen Context-Filter hinzu: „Taxonomy Term: Term ID

Die Einstellungen für die Relationship sind noch eindeutig. Hier wählt man die Taxonomie aus, welche die entsprechende Relation hat, z. B. „Main Category“.

Jetzt kommt der vielleicht verwirrende Part, da Drupal im Wording beim Context-Filter von einem URL-Parameter ausgeht, wir den Parameter aber gar nicht über die URL mitgeben, sondern ihn über die entsprechende Relation bereitstellen.

Man nimmt folgende Einstellungen im Context-Filter vor:

  1. Auswählen des „Provide default value“ Radio-Buttons.
  2. Beim Drop-Down-Feld „Type“ wählt ihr „Taxonomy term ID from URL“ aus (obwohl wir gar nichts über die URL übertragen und das kann durchaus für Verwirrung sorgen, wenn man sich durch die Einstellungen klickt).
  3. Auswählen von „Load default filter from node page„.
  4. Auswählen von „Limit terms by vocabulary„.
  5. Auswahl der Taxonomy Vokabeln, die ihr zur Filterung benötigt.

Das war´s, jetzt solltet ihr in der View, z. B. einen Block, alle Produkte sehen, die mit der aktuellen Seite in Relation stehen.