2010-04-14 9 views
6

Ich bemerkte, manchmal, dass (vor allem, wenn mod_rewrite nicht verfügbar ist) dieser Weg Schema verwendet wird:Wie zuverlässig sind URIs wie /index.php/seo_path

http://host/path/index.php/clean_url_here 
--------------------------^ 

Diese scheint zu arbeiten, zumindest in Apache, wo index.php aufgerufen wird, und man kann den /clean_url_here Teil über $_SERVER['PATH_INFO'] abfragen. PHP sogar kind of advertises diese Funktion. Beispielsweise verwendet das CodeIgniter Framework diese Technik als Standard für ihre URLs.

Die Frage: Wie zuverlässig ist die Technik? Gibt es Situationen, in denen Apache nicht index.php aufruft, aber versucht, den Pfad aufzulösen? Was ist mit lighttpd, nginx, IIS, AOLServer?

Eine ServerFault-Frage? Ich denke, es hat mehr mit der Verwendung dieser Funktion in PHP-Code zu tun. Deshalb frage ich hier.

Nachtrag: Wie von VolkerK vorgeschlagen, ist eine sinnvolle Erweiterung dieser Frage: Wie kann ein Programmierer die Existenz von $_SERVER['PATH_INFO'] auf verschiedenen Servertypen beeinflussen?

Antwort

4

Ich denke das ist eine Frage, die gleichermaßen für Stackoverflow und Serverfault geeignet ist. Z.B. Ich als Entwickler kann Ihnen nur sagen, dass pathinfo so vertrauenswürdig ist wie jede Benutzereingabe (was bedeutet, dass es praktisch alles enthalten kann) und Ihr Skript kann es je nach Webserverversion und Konfiguration erhalten:

Apache: AcceptPathInfo
IIS: z AllowPathInfoForScriptMappings und andere
und so weiter und weiter ...

Aber Server-Admins können Sie möglicherweise sagen, welche Einstellungen Sie können erwarten, dass „in der realen Welt“ und warum werden diese Einstellungen bevorzugt.
Die Frage wird also: Wie viel Einfluss haben Sie (oder die erwartete Benutzerdatenbank) auf die Serverkonfiguration?

+0

Danke für die Apache und IIS Links. Nach ein bisschen Googeln (basierend auf dem neu gewonnenen Wissen über AcceptPathInfo), fand ich auch eine Lösung für nginx: http://kbeezie.com/view/php-self-path-nginx/ – Boldewyn

0

Aus meiner Erfahrung würde ich sagen PATH_INFOist in der Regel im normalen Web-Hosting-Umgebungen und Server-Setups zur Verfügung - auch auf IIS - aber in seltenen Fällen ist es nicht. Beim Erstellen einer Anwendung, die auf möglichst vielen Plattformen bereitgestellt werden sollte, würde ich path_info nicht auf einer fest programmierten Ebene vertrauen.

Wann immer ich kann, versuche ich eine Wrapper-Funktion zu bauen build_url(), die je nach einer Konfigurationseinstellung, entweder verwendet

  • die rohe URL www.example.com/index.php?clean_url=clean_url_here
  • der path_info Mechanismus www.example.com/index.php/clean_url
  • mod_rewrite www.example.com/clean_url

und verwenden Sie das in allen URLs, die die Anwendung ausgibt.

+0

Abstraktion ist immer eine gute Idee , einverstanden. Ich möchte jedoch speziell über die PATH_INFO-Erfahrungen und die Verfügbarkeit dieser Funktion Bescheid wissen. – Boldewyn

0

Es kann naive Skripte geben (z. B. automatische Verknüpfung), die das Format dieser URL nicht erkennen.Dadurch verringert sich die Wahrscheinlichkeit, dass Links zu Ihren Inhalten erstellt werden.
Da für diese Aufgaben selbstgewachsene reguläre Ausdrucksmuster üblich sind, ist die Wahrscheinlichkeit eines Scheiterns ziemlich real.

Technisch gesehen sind diese URLs in Ordnung. SEO-mäßig sind sie "weniger perfekt".

Verwandte Themen