4Danke
ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
335
335
EMPFEHLEN
-
Hallo,
ich benutze per htaccess nen modrewrite, der alle Anfragen, sofern die URL nicht existiert, an die index.php weiterleitet, was mir diverse Vorteile bietet.
Code :1 2 3 4 5 6 7
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
Bisher bin ich hingegangen und hab per
die URL selbst in Parameter zerlegt, so wie ich sie brauche.PHP-Code:explode('/' , substr($_SERVER['REQUEST_URI'], 1));
Meine Frage dazu ist, ist das richtig so? Greift man so auf die Parameter aus der URL zu oder macht man das normalerweise anders?
Gruß, Tommy
-
04.01.12 03:54 #2
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Normalerweise macht man das über $_GET und $_POST. In ein paar Fällen wäre es sogar $_REQUEST noch denkbar. Da brauchst du allerdings nix exploden oder auseinander zu nehmen.
Mach mal ein
Code php:1
var_dump($_GET);
wenn du die Parameter über URL überträgst, das gleiche mit $_POST, wenn du ein Formular mit Methode POST übermittelt hast.Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Hallo saftmeister,
danke für die Antwort, aber das war es leider nicht. GET und REQUEST enthalten nicht die gewünschten Werte.
Meine URLs setzen sich wie folgt zusammen:
myurl.de/news/show/id/13
Der erste Parameter news sagt mir, welches Modul ich lade und show welche Funktion.
Die darauf folgenden Parameter werden in ein Array geladen, wo der erste Parameter immer dem Key entspricht und der zweite Parameter dem Value. Also hier:
$_PARAM['id'] == 13
Wie bereits gesagt, bau ich mir das selbst zusammen anhand der explode und einer for Schleife.
Ich frag mich halt nur, wie andere das machen, die die URLs auch so benutzen wie ich?!
Gruß, Tommy
-
04.01.12 09:25 #4
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Die benutzen mod_rewrite für das aufsplitten und hängen einfach einen Query-String an die URL an. Ein Query-String könnte nach deinem Beispiel so aussehen:
index.php?category=news&action=show&id=13
Da könntest du mod_rewrite folgendermaßen dazu bewegen (ungetestet):
Code :1
RewriteRule ^([^\/]+)/([^\/]+)/([^\/]+)/([^\/]+)$ index.php?category=$1&action=$2&$3=$4 [NC,L]
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Wenn man sich ein wenig mehr da reinkniet, dann gibt es schon elegantere Lösungen
Das Modul und die Action kann man bereits im .htaccess als solche auslesen und dem GET mitgeben. Der Rest einfach als Parameter $_GET['params']
.htaccess
Code :1 2 3 4 5 6 7 8
#Rewrite Engine einschalten RewriteEngine on #nur Pfade umleiten die keine Datei sind RewriteCond %{REQUEST_FILENAME} !-f #nur Pfade umleiten die kein Ordner sind RewriteCond %{REQUEST_FILENAME} !-d #Weiterleiten RewriteRule ^([^/]*)/([^/]*)/(.*)$ index.php?modul=$1&action=$2¶ms=$3 [NC,L]
Anschliessend lässt sich einfacherdamit arbeiten
PHP-Code:$modul = $_GET['modul'];
$action = $_GET['action'];
//$param initialisieren
$param = array();
//ggf Standartwerte setzen
$param['var1'] = 'default_value_1';
$param['var3'] = 'default_value_3';
// Aus dem String 'var1/value1/var2/value2' ein ausführbarer PHP-Code machen
// '$param['var1']='value1'; $param['var2']='value2';'
$pattern = '/([^\/]+)\/([^\/]+)\/?/';
$replace = '$param[\'$1\']=\'$2\'; ';
$phpCode = preg_replace($pattern, $replace, $_GET['params']);
// und diesen mit eval ausführen. Die Standartwerte werden überschrieben
// falls ein Wert aus $_GET kommt.
eval($phpCode);
//TODO: Diverse Sicherheitschecks !
var_dump($modul,$action,$param);
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Ja, super, das war das, was ich gesucht hatte. Die .htaccess setzt das zu nem Query String zusammen.
Nur mein Problem ist jetzt, dass er scheinbar immer Parameter verlangt.
Gibt es da keine Möglichkeit die angehängten Parameter optional zu lassen.
Und Yaslaw, ich verwende da eine for-Schleife, du benutzt eval, gibt es da irgendwelche Vor- und Nachteile bzw. Risiken? Könnte man da jetzt nicht irgendwie bösartigen PHP Code einschleusen, der dann in dem eval ausgeführt wird?
Wie gesagt, so ähnlich hab ich das auch.
Gibt es an meiner Variante irgendetwas auszusetzen? Ich habe halt den Vorteil, das er bei mir fehlende Parameter automatisch mit den Standardwerten ergänzt, so dass die Url oft sehr kurz bleiben kann.PHP-Code:$standard['module'] = 'home';
$standard['controller'] = 'main';
$standard['action'] = 'index';
$urlParams = explode('/' , substr($_SERVER['REQUEST_URI'], 1));
$module = empty($urlParams[0]) ? $standard['module'] : $urlParams[0];
$controller = empty($urlParams[1]) ? $standard['controller'] : $urlParams[1];
$action = empty($urlParams[2]) ? $standard['action'] : $urlParams[2];
for($i = 3; $i < count($urlParams); $i++) {
if(isset($urlParams[($i + 1)])) $_PARAMS[$urlParams[$i]] = $urlParams[($i + 1)];
else break;
$i++;
}
var_dump($_PARAMS);
Kann ich das selbe Prinzip auch mit eurer Mod-Rewrite umsetzen?
Gruß, Tommy
-
04.01.12 13:39 #7
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Die Standartwerte hatte ich ja auch. Siehe die Komentare in meinem Code.
Aber der eval() ist durchaus ein Sicherheitsloch.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Super, Code umgeschrieben.
Vielen Dank für die Hilfe
Ähnliche Themen
-
(Mod-Rewrite) GET-Parameter aus Selectfeld
Von truckdriver im Forum Sonstige SprachenAntworten: 0Letzter Beitrag: 11.07.09, 12:51 -
mod rewrite
Von Yoel im Forum Hosting & WebserverAntworten: 0Letzter Beitrag: 11.02.08, 22:38 -
mod rewrite
Von Yoel im Forum CSSAntworten: 0Letzter Beitrag: 11.02.08, 22:38 -
Mod Rewrite
Von putzi im Forum Hosting & WebserverAntworten: 10Letzter Beitrag: 26.09.06, 15:21 -
rewrite mod
Von keymakerFD im Forum PHPAntworten: 6Letzter Beitrag: 23.08.06, 01:05





Zitieren



Login






[PHP][Snippet] Array zu XML konvertieren