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.

Recent Comments