Suchbegriff an die URL anhängen
Kalle_B
- php
Hallöle,
zum Beispiel bei php.net kann ich einfach einen Suchbegriff anhängen und werde auf die entspr. Seite geleitet: php.net/strpos
Wie funktioniert das? Ist das eine Auswertung mit der "Not Found" Seite ?
Leider weiss ich nicht, wie dieses Stichwort heißt.
MfG Kalle
Lieber Kalle_B,
php.net/strpos
Leider weiss ich nicht, wie dieses Stichwort heißt.
entweder steckt dahinter ein cleveres Script, das die Anfrage "interpretiert" und auf das "anscheinend gemeinte" weiterleitet (dazu gibt es entsprechende HTTP-Header), oder aber ein simples URL-Rewriting, das bestimmte URLs entsprechend intern fest umschreibt (siehe Apache und mod_rewrite).
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix und Kalle シ
entweder steckt dahinter ein cleveres Script, das die Anfrage "interpretiert" und auf das "anscheinend gemeinte" weiterleitet (dazu gibt es entsprechende HTTP-Header), oder aber ein simples URL-Rewriting, das bestimmte URLs entsprechend intern fest umschreibt (siehe Apache und mod_rewrite).
Eher Ersteres, da z.B. "Array" auf http://de.php.net/manual/de/ref.array.php und "strpos" auf http://de3.php.net/manual/de/function.strpos.php umleitet. Also zwei völlig verschiedene URLs …
—Gabriel﹫
Also, habe gerade einige Implementierungs-Möglichkeiten gefunden. Klick dich durch folgende Suchergebnisse durch:
http://www.drweb.de/scope/scope.php?scopeform_sterm=mod+rewrite
Hallo シ
Also, habe gerade einige Implementierungs-Möglichkeiten gefunden. Klick dich durch folgende Suchergebnisse durch:
Wer jetzt?
—Gabriel﹫
Moinsen
Alles was per ? an eine URL angehängt wird, ist der sogenannte Query-String und kann in PHP über die Variable $_SERVER["QUERY_STRING"] ausgelesen werden.
Gruß,
DL
Hallo Kalle,
zum Beispiel bei php.net kann ich einfach einen Suchbegriff anhängen und werde auf die entspr. Seite geleitet: php.net/strpos
Das ist beim Apachen das Feature "pathinfo", das per Default eingeschaltet ist.
Wenn Du dir z.B. mal den Unterschied zwischen $_SERVER['PHP_SELF'] und $_SERVER['SCRIPT_NAME'] anschaust, wird es schon etwas klarer.
Der Apache sucht nach dem längsten Treffer im Pathstring. Alles, was darauf folgt, wird als zusätzliche Pfadinformation an das Script weitergegeben und steht dadurch als impliziter URL-Paramter zur Verfügung.
Die expliziten URL-Paramter folgen dann erst nch dem '?'
LG
Chris©
Hallo Kalle,
Das ist beim Apachen das Feature "pathinfo", das per Default eingeschaltet ist.
noch ein kleiner Nachtrag für die Praxis:
Bau Dir eine Datei, die nur die phpinfo()-Funktion enthält. Nennen sie einfach "info.php" und speichere sie gleich im Wurzelverzeichnis Deiner Domain
Wenn Du dann "http://example.org/info.php/xxxyyy" in die Adressleiste Deines Browsers schreibst, findest Du unter den Apache-Environment-Variablen und in den PHP-Variablen einen Eintrag wieder:
PATH_INFO /xxxyyy
_SERVER["PATH_INFO"] /xxxyyy
Die Auswertung sit dann ein Leichtes.
Und nochmal ganz deutlich: wenn man pathinfo bei Apache eingeschaltet lässt, sollte man tunlichst die Verwendung von $_SERVER['PHP_SELF'] überdenken und im Zweifelsfalle immer lieber $_SERVER['SCRIPT_NAME'] verwenden. Formulare werden sonst per Cross-Site-Scripting entführbar, was besonders bei Anmeldeformularen (User/Password) unangenehm ist.
LG
Chris©
Hi,
zum Beispiel bei php.net kann ich einfach einen Suchbegriff anhängen und werde auf die entspr. Seite geleitet: php.net/strpos
Das ist beim Apachen das Feature "pathinfo", das per Default eingeschaltet ist. [...]
Der Apache sucht nach dem längsten Treffer im Pathstring. Alles, was darauf folgt, wird als zusätzliche Pfadinformation an das Script weitergegeben und steht dadurch als impliziter URL-Paramter zur Verfügung.
Gerade beim genannten Beispiel, http://php.net/strpos, kann es m.E. nicht PATH_INFO sein.
Bei deinem spaeteren Beispiel, http://example.org/info.php/xxxyyy - da gibt es etwas "findenswertes" im Pfad, naemlich eine Scriptdatei namens info.php. Die kann der Apache aufrufen, und ihr den "Rest" als PATH_INFO uebergeben.
Bei http://php.net/strpos ist aber niemand da, der aufgerufen werden koennte - und das DirectoryIndex-Dokument wird in so einem Falle IIRC nicht angesprochen, um diesem dann evtl. PATH_INFO zur Verfuegung zu stellen.
Dieser Fall muesste also IMHO, sofern keine Datei/Verzeichnis strpos existiert (und auch keine anderen Abfangmechanismen eingestellt sind), schlicht mit einem Aufruf des 404-Errorhandlers enden.
MfG ChrisB
Hallo ChrisB,
Gerade beim genannten Beispiel, http://php.net/strpos, kann es m.E. nicht PATH_INFO sein.
Du hast Recht. Das Index-Dokument wird nicht aufgerufen, zumindest was ich eben auf die Schnelle feststellen konnte. Da kommt dann nur der 404.
Muss also noch 'was anderes dahinterstecken. Das interessiert mich doch sehr. Ich werde es morgen Abend mal ausprobieren.
LG
Chris©
Hi,
Gerade beim genannten Beispiel, http://php.net/strpos, kann es m.E. nicht PATH_INFO sein.
Du hast Recht. Das Index-Dokument wird nicht aufgerufen, zumindest was ich eben auf die Schnelle feststellen konnte. Da kommt dann nur der 404.
Jepp, es braucht halt zunaechst mal was "physisch existentes", aufrufbares, damit der Rest dann als PATH_INFO uebergeben werden kann.
D.h., wenn man PATH_INFO nutzen will, ist mindestens eine "Ebene" darueber im Pfad erforderlich - eine Scriptdatei, die eine Verzeichnisebene "simuliert".
(Wenn man die nicht "script.php" nennen will, sondern wie ein "richtiges" Verzeichnis aussehen lassen will, kann man natuerlich auch eine Datei namens "script" per Files-Direktive als PHP parsen lassen.)
Muss also noch 'was anderes dahinterstecken. Das interessiert mich doch sehr. Ich werde es morgen Abend mal ausprobieren.
Es koennte, wie schon erwaehnt, einfach der 404-ErrorHandler sein - seinerseits ein Script, welches sich den Request-URI betrachtet, und schaut, ob es dazu nicht doch was passendes anzuzeigendes findet.
Dazu den ErrorHandler zu "missbrauchen", finde ich aber unschoen.
mod_rewrite wuerde ebenfalls die Moeglichkeit der Weiterreichung an ein Script bieten - und mittels RewriteCond und den Flags -f/-d koennte man das nur aufrufen lassen, falls zum Request kein real vorhandenes Verzeichnis/Datei existiert.
Weitere Moeglichkeiten sind natuerlich auch noch denkbar, aber nicht unbeding wahrscheinlich (und auch nicht sonderlich schoen). So *koennten* die PHP-Jungs ja einfach fuer /strpos und allen weiteren Krempel auch einfach SymLinks angelegt haben, die auf die richtige Seite verweisen, oder aehnlichen Unfug :-)
MfG ChrisB
Hallo ChrisB,
So *koennten* die PHP-Jungs ja einfach fuer /strpos und allen weiteren Krempel auch einfach SymLinks angelegt haben, die auf die richtige Seite verweisen
Das erscheint mir sogar sehr wahrscheinlich und vor allem, puristisch genug, dass es echte Linuxer nutzen würden.
LG
Chris©