Wie zuverlässig sind URIs wie /index.php/seo_path
-
26-09-2019 - |
Frage
bemerkte ich, dass manchmal (vor allem, wenn mod_rewrite nicht verfügbar ist) dieser Weg Schema verwendet:
http://host/path/index.php/clean_url_here
--------------------------^
Das scheint zu arbeiten, zumindest in Apache, wo index.php
genannt wird, und man kann den /clean_url_here
Teil über $_SERVER['PATH_INFO']
abfragen. PHP selbst Art wirbt diese Funktion. Auch zum Beispiel der CodeIgniter Framework verwendet diese Technik als Standard für ihre URLs.
Die Frage: Wie zuverlässig ist die Technik? Gibt es Situationen, in denen Apache nicht nennen index.php
sondern versucht, den Weg zu lösen? Was ist lighttpd, nginx, IIS, AOLServer?
Ein ServerFault Frage? Ich denke, es ist mehr bekommt bei der Verwendung dieser Funktion innerhalb PHP-Code zu tun. Deshalb bitte ich hier.
Nachtrag: Wie VolkerK vorgeschlagen, eine angemessene Verlängerung auf diese Frage lautet: Wie kann ein Programmierer Einfluss auf die Existenz von $_SERVER['PATH_INFO']
auf verschiedenen Servertypen
Lösung
Ich denke, dass dies eine Frage, die gleichermaßen für Stackoverflow und serverfault geeignet ist. Z.B. Ich als Entwickler kann Ihnen nur sagen, dass pathinfo ist so vertrauenswürdig wie jede Benutzer-Eingabe (das heißt, es praktisch alles enthalten kann) und das Skript kann oder kann es nicht erhalten auf der Webserver Version und Konfiguration abhängig:
Apache: AcceptPathInfo
IIS: z.B. AllowPathInfoForScriptMappings und andere
und so weiter und weiter ...
Aber Server-Admins möglicherweise kann Ihnen sagen, welche Einstellungen Sie können erwarten, dass „in der realen Welt“ und warum werden diese Einstellungen bevorzugt.
Die Frage lautet also: Wie viel Einfluss haben Sie (oder die erwartete totzukriegen) auf der Serverkonfiguration
Andere Tipps
AcceptPathInfo Bedürfnisse zu aktivieren, um diese Funktion zu haben.
Aus meiner Erfahrung würde ich sagen, PATH_INFO
ist in der Regel in normalen Web-Hosting-Umgebungen und Server-Setups - auch auf IIS - aber in seltenen Fällen ist es nicht. Wenn eine Anwendung erstellen, die angeblich ausfahrbaren sein auf so viele Plattformen wie möglich, würde ich nicht vertrauen path_info auf einem Niveau hartcodiert.
Jedes Mal, wenn ich kann, ich versuche, eine Wrapper-Funktion build_url()
zu bauen, dass abhängig von einer Einstellung in der Konfiguration verwendet entweder
- die rohe URL
www.example.com/index.php?clean_url=clean_url_here
- die path_info Mechanismus
www.example.com/index.php/clean_url
- mod_rewrite
www.example.com/clean_url
und verwenden, die in allen URLs die Anwendung aussendet.
Es könnte naive Skripte sein (auto-Verknüpfung zum Beispiel), dass diese URL des Format nicht erkennen. Dadurch Verringerung der Wahrscheinlichkeit, dass Links auf Ihre Inhalte erstellt werden.
Da regulärer Ausdruck Muster home-grown für diese Aufgaben gemeinsam ist, ist die Wahrscheinlichkeit des Scheiterns ganz real.
Technisch sind diese URLs in Ordnung. SEO-weise, sie sind 'weniger perfekt'.