Entries Tagged as 'Apache'

ColdFusion: Felxible Parameter in SEO URLs

Apache , ColdFusion No Comments »

Flexible SEO URLs in ColdFusion leicht gemacht:

In unserer .htaccess notieren wir

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.cfm?q=$1 [L,QSA]

RewriteEngine on schaltet mod_reqrite ein
RewriteCond %{REQUEST_FILENAME} !-f und RewriteCond %{REQUEST_FILENAME} !-d prüfen ob die angeforderte Datei eine echte Datei oder ein Verzeichnis ist.
RewriteRule ^(.*)$ index.cfm?q=$1 [L,QSA] leitet alles was an die URL angehängt wird an unsere index.cfm und verpackt es in der URL Variable "q" (kann natürlich beliebig benannt werden).

In unserer Application.cfc machen wir dann folgendes:

public boolean function onRequestStart(){

param name="url.q" default="";

for(i=1;i lte listlen(url.q,"/"); i++){

if (i mod 2 eq 0){
structinsert(url,listgetat(url.q,i-1,"/"),listgetat(url.q,i,"/"),true);
}
}

structAppend(request, url, false);
structAppend(request, form, true);

return true;
}

Damit das Script auch ohne die Übergabe von url.q funktioniert, definieren wir url.q als Parameter.

Nun kommt das Handling von url.q. Wir lassen über url.q eine For-Schleife laufen und behandeln dabei url.q als Liste mit / als Separator. In jedem Durchlauf wird nun geprüft, ob sich unsere Zählvariable i ohne Rest durch 2 teilen lässt. Ist das der Fall, holen wir uns mit listgetat(url.q,i-1,"/") den vorhergehenden Listeneintrag und nutzen ihn als Key im URL Scope. Den aktuellen Listeneintrag holen wir mit listgetat(url.q,i,"/") und setzen ihn als Value ein. Das "true" in unserem structinsert() ermöglicht das existierende Keys überschrieben werden, was dem normalen Verhalten von URL-Parametern entspricht.

Anschließend packen wir URL und FORM Variablen in den REQUEST Scope. So können wir in Scripten auf die Variablen zugreifen, egal ob sie per URL oder über ein Formular übergeben wurden. Dabei definieren wir durch die Angabe false/true in unserem structAppend() das FORM Variablen gleichnamige URL Variablen überschreiben.

Mit diesem kleinen Script können wir nun beliebig viele Parameter im Format variable/wert an die URL anhängen:
www.example.de/var1/wert1/var2/wert2/var3/wert3/var4/wert4

Was als letztes Übergeben wird, ist dem Script egal:
www.example.de/var1/wert1/var2/wert2/var3/wert3/var4/wert4/index.html funktioniert ebenso wie www.example.de/var1/wert1/var2/wert2/var3/wert3/var4/wert4/irgendwas.txt.

Apache: Ladezeit durch GZip optimieren

Apache No Comments »

Die Ladezeiten einer Website lassen sich mit dem Apache enorm verkürzen. Hierzu wird das mod_deflate benötigt, welches eigentlich bei jeder Linux Distro, OS X und Windows installiert sein sollte.

Um mod_deflate nutzen zu können sind zwei Schritte notwendig.

Schritt 1
Das Modul laden. Hierfür öffnen wir die httpd.conf bzw. apache2.conf (je nach OS) und suchen nach folgender Zeile:

#LoadModule deflate_module modules/mod_deflate.so

Hier entfernen wird das #, speichern die Datei und starten den Apache neu. Bevor wir die Datei schliessen, suchen wir noch nach der Zeile:

Load config files from the config directory

Hier steht wo sich zusätzliche Konfigurationsdateien befinden müssen, damit sie geladen werden. Auf den meisten Linux Systemen sollte der Pfad /etc/httpd/conf.d lauten.

Schritt 2
Wir wechseln in den Ordner /etc/httpd/conf.d und erstellen eine leere Textdatei, die wir deflate.conf nennen. Diese füllen wir mit folgenden Anweisungen:

SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|iso|tar|bz2|sit|rar|png|jpg|gif|jpeg|flv|swf)$ no-gzip dont-vary
DeflateCompressionLevel 9
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

Erklärung:
SetOutputFilter DEFLATE
Aktiviert das Modul

SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|iso|tar|bz2|sit|rar|png|jpg|gif|jpeg|flv|swf)$ no-gzip dont-vary
Setzt einen Filter, welche Dateitypen NICHT komprimiert werden sollen. Dazu gehören Binärdaten, Bilder (sind schon komprimiert), komprimierte Archive (zip, rar etc.), Flash und Flashvideo. Alles andere wird komprimiert. (Ihr könnt diese natürlich euren Bedürnissen entsprechend anpassen.)

DeflateCompressionLevel 9
Setzt die Kompressionsstärke. 9 ist die höchste Stufe, hier werden je nach Datei bis zu 75% eingespart!

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

Hier werden einige Browser ausgeklammert, von denen bekannt ist, das sie mit GZip nicht umgehen können. Diese bekommen den Inhalt unkomprimiert.

Und hier könnt ihr testen, ob die Komprimierung funktioniert und wie stark das Datenvolumen reduziert wird.

Apache / ColdFusion: URL rewriting

Apache , ColdFusion No Comments »

Für ColdFusion gibt es etliche Tutorials in denen das Umschreiben von URLs beschrieben wird. Jedoch immer mittels CFML. Dabei kann der Apache das viel einfacher:

Options -Multiviews

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^([a-zA-Z0-9-_]+)   index.cfm?site=$1   [QSA]

What the hell?

Der Reihe nach:

Options -Multiviews
Wenn Multiviews aktiviert ist und ein Request auf index.html erfolgt, index.html aber nicht existiert, wird eine Suche in Gang gesetzt. Findet der Apache z.B. eine index.php oder index.css, wird diese ausgeliefert. Keine gute Idee und für unser Vorhaben hinderlich.

RewriteEngine on
Die RewriteEngine, die unsere URLs umschreibt, muss erst mal aktiviert werden.

RewriteCond
%{REQUEST_FILENAME} !-f
Der Pfad in der URL verweist nicht auf eine existierende Datei

%{REQUEST_FILENAME} !-d
Der Pfad in der URL verweist nicht auf einen existierenden Ordner

%{REQUEST_FILENAME} !-l
Der Pfad in der URL verweist nicht auf einen symbolischen Link

RewriteRule
RewriteRule ^([a-zA-Z0-9-_]+) index.cfm?site=$1 [QSA]
Alle Buchstaben, Zahlen, sowie die Zeichen – und _ werden als Variable an index.cfm?site= angehängt.

Das [QSA] bewirkt, das weitere Parameter mit Übergeben werden können.

Aus www.example.com/fotos/ wird intern www.example.com/index.cfm?site=fotos.

Weitere Parameter können per URL übergeben werden. Aus www.example.com/fotos/?jahr=2009 wird dann www.example.com/index.cfm?site=fotos&jahr=2009

Powered by Mango Blog. ©2012 Patrick Heppler. Design inspired by the GlossyBlue Theme © N.Design Studio.
RSS Feeds