neues Zend Framework Rewrite

Seit einiger Zeit findet sich im Quickstart Tutorial (englisch) des Zend Frameworks eine neue verbesserte RewriteRule:

Wird das mod_rewrite Modul unter Apache verwendet, wird empfohlen, eine .htaccess Datei mit folgendem Inhalt im Hauptverzeichnis der Domain (DocumentRoot) abzulegen:

# public/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

Was passiert hier nun?

Die Umgebungsvariable REQUEST_FILENAME beinhaltet laut Apache-Dokumentation den vollen Pfad zur Datei oder zum Script entsprechend der Anfrage (z.B. /var/www/domain.tld/public/css/style.css).

Die drei Bedingungen (RewriteCond) prüfen nun, ob diese/s Datei/Script eine tatsächlich existierende Datei (s), symbolischer Link (l) oder ein Verzeichnis (d) sind. Wenn ja: leite die Anfrage unverändert durch und beachte keine weiteren Regeln ([L] = Last/Letzte Regel), also kein Rewrite und Ende der Prüfung. Wenn nein: Schreibe die Anfrage zu /index.php um. Das NC bewirkt, dass nicht zwischen Klein- und Großschreibung unterschieden wird (NC = no case-sensitive).

Besonderheit bei Deklaration der Rewrite Bedingungen/Regeln innerhalb eines VirtualHost
Die zuvor aufgezeigten Bedingungen gelten für die Deklaration innerhalb einer .htaccess Datei. Gleichermaßen kann das Rewriting natürlich auch innerhalb einer VirtualHost Definition deklariert werden.

Jedoch ist bei einer Deklaration innerhalb eines VirtualHosts zu beachten, dass die Umgebungsvariable REQUEST_FILENAME hier nicht den vollen, sondern den relativen Pfad vom DomainRoot beinhaltet.

In den Bedingungen muss daher die Umgebungsvariable DOCUMENT_ROOT zusätzlich vorangestellt werden!
Der Rest bleibt erhalten.

# innerhalb VirtualHost Deklaration
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -s [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -l [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

Weiterleitung von domain.tld zu www.domain.tld

Häufig zeigen die Domains domain.tld und www.domain.tld auf die selben Inhalte. Dies kann als so genannter „Dublicate Content“ gewertet werden.

Um also alle Anfragen an domain.tld auf www.domain.tld weiterzuleiten gibt es die Möglichkeit per .htaccess eine entsprechende Url-Rewrite Regel für eine 301-Weiterleitung („Moved Permanently“) einzurichten.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.tld$ [NC]
RewriteRule ^(.*)$ http://www.domain.tld/$1 [R=301,L]

Eine 301-Moved-Permanently Weiterleitung weist den Client an, sich die ursprüngliche Adresse (in diesem Fall ohne „www“) nicht zu merken, sondern nur die neue Adresse!

Weitere Informationen zu HTTP Status-Codes beantwortet Wikipedia:
http://de.wikipedia.org/wiki/HTTP-Statuscode

Edit:
Das oben gelistete Rewrite kann auch allgemeiner (es muss keine Domain mehr angegeben werden) gehalten werden, in dem es wie folgt angepasst wird:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?!www)(.+) [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

2-Port RAID Controller Debian Etch

Sofern unter Debian Etch (Kernel 2.6.18-x) ein RAID-Controller eingesetzt werden soll, empfiehlt sich z.B. der 3ware 8006-2 Sata Controller (2 Port). Die Karte ist eine PCI-Karte und überträgt somit max 133 MByte/s. Als Treiber fungiert das entsprechende Kernel Modul „3w_xxxx“.

Wer bereits den 2.6.19er Kernel sein Eigen nennt, dem empfiehlt sich dann schon der 9650SE-02LP Controller (auch von 3ware), der bereits als PCI-Express arbeitet und somit deutlich schneller ist.  Für Debian Etch kann der Backports Kernel herunter geladen werden, der diesen Treiber bereits beinhaltet.

PS: Danke an Janek und Benjamin für die Infos!

Postfix E-Mail Queue leeren

Jeder Administrator eines E-Mail-Servers wird sicherlich irgendwann einmal die Mail-Queue bearbeiten müssen, weil eine oder mehrere E-Mails dort „hängen“ bleiben oder explizit an der Auslieferung gehindert werden sollen.

Am Beispiel des MTA Postfix:

  • Die Mail-Queue kann angezeigt werden mit
    ~# mailq
  • Eine bestimmte E-Mail aus der Queue löschen mit
    ~# postsuper -d ID
  • Eine bestimmte E-Mail aus der Queue auf „halten“ setzen (Senden der E-Mail wird unterbunden)
    ~# postsuper -h ID
  • Eine „gehaltene“ E-Mail aus der Queue auf „senden“ setzen (Senden der E-Mail wird erneut versucht)
    ~# postsuper -H ID

Wird anstatt der ID der String „ALL“ (uppercase, ohne Anführungszeichen) verwendet, wird das Kommando auf alle E-Mails der Queue angewendet.
~# postsuper -d ALL

Weitere Informationen gibt ~# man postsuper