URL Rewriting
Eine immer wieder beliebtes Thema ist das URL Rewriting. Viele User finden die weitergabe der IDs nicht hübsch und möchten lieber hübsche Pfade in der Broswerzeile. Hier also mal ein ganz primitives Tutorial für eine einfache Umsetzung:
Der erste Schritt ist die entsprechende Rewirte Engine zu konfigurieren. Hierzu muss entsprechend das rewrite Modul im Apachen aktiviert sein. Nun muss man eine Konfiguration ähnlich der folgenden hinterlegen:
Diese Konfiguration bewirkt, dass alle Requests, die lediglich Wort-Zeichen, Whitespaces und slashes enthalten an die index.php weitergeleitet werden und der Pfad in der Get-Variable name übergeben wird. Wichtig ist, dass hier kein Punkt enthalten ist und somit alle Dateien wie style.css oder admin.php noch ganz normal aufgerufen werden können.
Im nächsten Schritt muss man nun die in der Get-Variable name enthaltenen Daten auswerten. Dies wird durch eine Include-Datei, welche überdie Dateiverwaltung eingebunden wird, realisiert. Dazu legt man in der Dateiverwaltung eine Datei vom Type Includes an, man der man das Häkchen für Index Einbinden setzt. In diese Datei packt man dann den folgenden Inhalt:
Dieser Code bewirkt, dass nach einem Layer gesucht wird, dessen name mit der Get-Variable übereinstimmt. Wird ein entsprechender Layer gefunden wird dieser aufgerufen, indem seine ID einfach in die page Variable geschrieben wird. Klingt doch ganz einfach ;-)
Ein Wichtiger Tipp noch: Benutzt beim einbinden von Bildern oder css-Dateien absolute Pfade, dann erspart ihr euch eine menge Ärger. Absolute Pfade beginnen entweder mit einem / oder direkt mit http://
Nun kann man solche Adressen aufrufen, wie beispielsweise:
http://master.iv-dev.de/Montagsmaler%20online
Dieses Tutorial ist nur eine einfache Grundlage, je nach wunsch muss man noch workarounds für GET übergaben schaffen und auch die verlinkung inerhalb des CMS anpassen. Dies würde beispielsweise änderungen am Menü-Panel Script erfordern oder eine veränderte Version dieses Scriptes. Wer mag kann sich damit ja auseinandersetzen, für mich ists spielerei.
Der erste Schritt ist die entsprechende Rewirte Engine zu konfigurieren. Hierzu muss entsprechend das rewrite Modul im Apachen aktiviert sein. Nun muss man eine Konfiguration ähnlich der folgenden hinterlegen:
|
|
Quellcode |
1 2 |
RewriteEngine on RewriteRule ^/([\s\w\/]+)$ /index.php?name=$1 |
Diese Konfiguration bewirkt, dass alle Requests, die lediglich Wort-Zeichen, Whitespaces und slashes enthalten an die index.php weitergeleitet werden und der Pfad in der Get-Variable name übergeben wird. Wichtig ist, dass hier kein Punkt enthalten ist und somit alle Dateien wie style.css oder admin.php noch ganz normal aufgerufen werden können.
Im nächsten Schritt muss man nun die in der Get-Variable name enthaltenen Daten auswerten. Dies wird durch eine Include-Datei, welche überdie Dateiverwaltung eingebunden wird, realisiert. Dazu legt man in der Dateiverwaltung eine Datei vom Type Includes an, man der man das Häkchen für Index Einbinden setzt. In diese Datei packt man dann den folgenden Inhalt:
|
|
PHP-Quelltext |
1 2 3 |
if( empty( $_GET['page'] ) && !empty( $_GET['name'] ))
if( $seite = $db->get( $prefix."content_layer", "name = '$_GET[name]'", 1 ))
$_GET['page'] = $seite['id'];
|
Dieser Code bewirkt, dass nach einem Layer gesucht wird, dessen name mit der Get-Variable übereinstimmt. Wird ein entsprechender Layer gefunden wird dieser aufgerufen, indem seine ID einfach in die page Variable geschrieben wird. Klingt doch ganz einfach ;-)
Ein Wichtiger Tipp noch: Benutzt beim einbinden von Bildern oder css-Dateien absolute Pfade, dann erspart ihr euch eine menge Ärger. Absolute Pfade beginnen entweder mit einem / oder direkt mit http://
Nun kann man solche Adressen aufrufen, wie beispielsweise:
http://master.iv-dev.de/Montagsmaler%20online
Dieses Tutorial ist nur eine einfache Grundlage, je nach wunsch muss man noch workarounds für GET übergaben schaffen und auch die verlinkung inerhalb des CMS anpassen. Dies würde beispielsweise änderungen am Menü-Panel Script erfordern oder eine veränderte Version dieses Scriptes. Wer mag kann sich damit ja auseinandersetzen, für mich ists spielerei.
So unser Klugscheißer Kekub will mal wieder mehr... Wenn man zusätzlich zum Layer noch Get-Daten übertragen will, muss eine weitere Regel aufgenommen werden:
habe ich allerdings noch nicht getestet ;-)
Und wer gerne den gesamten Layerpfad angeben möchte weil er gerne Layer mit gleichen Namen macht kann auf das folgende zurückgreifen:
ebenfalls ungetestet ;-)
|
|
Quellcode |
1 |
RewriteRule ^/([\w\s\/]+)\?(.+)$ /index.php?page=$1&$2 |
habe ich allerdings noch nicht getestet ;-)
Und wer gerne den gesamten Layerpfad angeben möchte weil er gerne Layer mit gleichen Namen macht kann auf das folgende zurückgreifen:
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 |
if( empty( $_GET['page'] ) && !empty( $_GET['name'] )) {
$name = explode( "/", $_GET['name'] );
$parent = "IS NULL";
foreach( $name as $l )
if ( $path = $db->get( $prefix."content_layer", "name = '$l' AND parent $parent", 1 ))
$parent = "= $path[id]";
if( $path )
$_GET['page'] = $path['id'];
}
|
ebenfalls ungetestet ;-)
Ähnliche Themen
-
Probleme und Lösungen »-
Page
(28. September 2009, 15:19)