manman: alternative zu mod rewrite

Hallo,

da ich leider kein Modrewrite zur Verüfgung habe, habe ich mir überlegt, könnte ich ja die Parameter einfach nach einem agehängten / mit / abgetrennt hinter die index.php stellen.

Also so:

http://subdomain.domain.de/index.php/parameter1/parameter2/

Dies könnte ich ja dann mit $_SERVER['REQUEST_URI'] selbst auslesen ... nun stellt sich mir aber die Frage, ob dies ohne weiteres funktionsfähig ist so, oder ob es da vielleicht eine ungeahnte hürde gibt?

Gruß

P.S.: natürlich könnte man dann obige url zum Beispiel auch so anpassen:
http://domain.de/subdomain.php/kategoerie/seite/parameter1/parameter2
das sähe ja dann schon viel schöner aus...

  1. http://subdomain.domain.de/index.php/parameter1/parameter2/

    Dies könnte ich ja dann mit $_SERVER['REQUEST_URI'] selbst auslesen

    Was Du suchst, läuft unter den Stichwort "pathinfo" und muss im Apache mittels AcceptPathInfo explizit eingeschaltet werden. Du findest den angehängten Pfad innerhalb PHPs dann fix und fertig in $_SERVER["PATH_INFO"].

    Mit einem <files>-Block und ForceType müsste es sogar möglich sein, das .php aus der URL zu nehmen:

    <files "bla">
    ForceType application/x-httpd-php
    </files>

    Bei http://example.com/bla/fasel wäre bla dann das PHP-Skript (ja, die Datei heißt einfach bla, ohne die .php-Endung), /fasel müsste in $_SERVER["PATH_INFO"] auftauchen.

    1. Was Du suchst, läuft unter den Stichwort "pathinfo" und muss im Apache mittels AcceptPathInfo explizit eingeschaltet werden.

      Lesen bildet: AcceptPathInfo sollte bei PHP-Skripten standardmäßig aktiv sein.

      <files "bla">
      ForceType application/x-httpd-php
      </files>

      Und dieser Block gehört natürlich in die .htaccess-Datei des Verzeichnisses, in dem auch das Skript namens bla liegt.

    2. Hello,

      Was Du suchst, läuft unter den Stichwort "pathinfo" und muss im Apache mittels AcceptPathInfo explizit eingeschaltet werden. Du findest den angehängten Pfad innerhalb PHPs dann fix und fertig in $_SERVER["PATH_INFO"].

      Wenn man dies einschaltet (was Standardeinstellung ist) sollte man dann auch darauf achten, für selbstreferenzierende Scripte nicht $_SERVER['PHP_SELF'], sondern $_SERVER['SCRIPT_NAME'] zu benutzen, da Formulare sonst entführbar werden.

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

      1. Hallo,

        entführbar? In welchem Sinne?

        Wo ist der UNterschied zwischen $_SERVER['SCRIPT_NAME'] un $_SERVER['SCRIPT_NAME']?

        Gruß

        1. Hello,

          entführbar? In welchem Sinne?

          Man kann mit einem präparierten Link auf das Formular z.B. in einer eMail ein neues Action-Attribut einschleusen, das dann dazu führt, dass der Post- oder auch Get-Request dann woanders landet, als man denkt. Dort können die Parameter dann ausgelesen werden...

          Wo ist der UNterschied zwischen $_SERVER['SCRIPT_NAME'] un $_SERVER['SCRIPT_NAME']?

          Abends, besonders draußen, da ist es dunkel.

          Wo ist der Unterschied zwischen $_SERVER['PHP_SELF'] un $_SERVER['SCRIPT_NAME']?

          Probier es mal aus. $_SERVER['PHP_SELF'] enthält den Script-Namen mit anhängender Path-Info.

          Harzliche Grüße vom Berg
          http://bergpost.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

          1. Man kann mit einem präparierten Link auf das Formular z.B. in einer eMail ein neues Action-Attribut einschleusen, das dann dazu führt, dass der Post- oder auch Get-Request dann woanders landet, als man denkt. Dort können die Parameter dann ausgelesen werden...

            Hi,

            leider verstehe ich das noch nicht ganz.

            Wie könnte zum Beispiel so ein präperierter Link aussehen
            ?

            Gru

            1. Hello,

              leider verstehe ich das noch nicht ganz.

              Das ging mir am Anfang auch so...
              Dabei ist es ganz einfach.

              Wie könnte zum Beispiel so ein präperierter Link aussehen

              /"></form><form%20action=http://example.lan/boeser_entfuehrer.php%20name="

              einfach anhängen an die URL anstelle der mit ? angehngten Parameter oder davor

              Es würde nun das Formular durch seinem normalen Submit-Button mit allen seinen Parametern an http://example.lan/boeser_entfuehrer.php gesendet werden.

              Harzliche Grüße vom Berg
              http://bergpost.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

              1. Hallo,

                wieso das, ich überprüfe ja die Daten mit PHP vorher bevor ich sie verwende. Außerdem habe ich nicht vor irgendwelche Parameter in die Seitenausgabe aufzunehmen. Die Parameter sollen lediglich bestimmte dynamische INhalte (Seite z von n anzeigen etc.) "wählen".

                Also ich muss doch egal wie ich die "Parameter" dann hole eh diese überprüfe, oder wie?

                1. Hello,

                  wieso das, ich überprüfe ja die Daten mit PHP vorher bevor ich sie verwende.

                  Und überprüfst Du auch $_SERVER['PHP_SELF'] auf seinen Inhalt?
                  Zeig bitte mal den Code, mit dem Du das machst.

                  Außerdem habe ich nicht vor irgendwelche Parameter in die Seitenausgabe aufzunehmen.

                  Als bösen Angreifer interssiert mich überhaupt nicht, was Du vor hast, sondern nur das, was Du unterlassen haben könntest.

                  Die Parameter sollen lediglich bestimmte dynamische INhalte (Seite z von n anzeigen etc.) "wählen".

                  Was interessiert mich das als BOT vom fremden Stern? Da versuche ich doch nur, soviel wie möglich Seiten auf jede nur erdenkliche Art übernehmen zu können.

                  Also ich muss doch egal wie ich die "Parameter" dann hole eh diese überprüfe, oder wie?

                  Nein, Das Einschleusen der "Formularentführung" geschieht parallel zu den Werteüberprüfungen der Parameter aus $_GET, $_POST, $_COOKIE, denn es findet über $_SERVER['PHP_SELF'] statt.

                  Zeig mir bitte unter Tausend Scripten zehn, die $_SERVER['PHP_SELF'] nutzen und überprüfen.

                  Harzliche Grüße vom Berg
                  http://bergpost.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

                  1. Hallo,

                    ja noch überprüfe ich das ja noch nicht ^^ ... Aber letztendlich ist das doch das gleiche wie _GET-, _POST- und _COOKIE-Daten, die man auch überprüfen sollte oder?
                    Ich will ja garnicht bestreiten, dass $_SERVER['SCRIPT_NAME'] die bessere Methode ist, jedoch verstehe ich nicht, welchen UNterschied das ganze für mich macht...

                    Gruß

                    1. Hello,

                      ja noch überprüfe ich das ja noch nicht ^^ ... Aber letztendlich ist das doch das gleiche wie _GET-, _POST- und _COOKIE-Daten, die man auch überprüfen sollte oder?
                      Ich will ja garnicht bestreiten, dass $_SERVER['SCRIPT_NAME'] die bessere Methode ist, jedoch verstehe ich nicht, welchen UNterschied das ganze für mich macht...

                      Deshalb hatte ich doch angeregt, dass Du es einfach mal ausprobierst, was der Unterschied zwischen

                      $_SERVER['PHP_SELF']

                      und

                      $_SERVER['SCRIPT_NAME']

                      ist. Bau Dir einfach mal ein "Affenformular" und lasse Dir beide Variablen anzeigen, mit und ohne Zusätze in der URL.

                      Außerdem hat sich auch die Beschreibung im PHP-Manual zu den beiden Variablen geändert.
                      Dort wird leider nur sehr schwammig klar gemacht, dass eben $_SERVER['SCRIPT_NAME'] für selbstrefernezierende Scripte genutzt werden soll und nicht $_SERVER['PHP_SELF'].

                      Das kann man nur herauslesen, wenn man schon sensibilisiert ist.

                      Vermutlich kriege ich jetzt gleich wieder Gegenhaltungen, aber wenn man bei PHP-Usern herumfragt, welche Variable sie denn zur Selbstreferenzierung benutzen und warum, dann kommt zu 90% Unverständnis über meine Dummheit zu Ausdruck.

                      "Wieso? $_SERVER['PHP_SELF'] natürlich, oder dachtest Du etwa, dass wir noch $PHP_SELF benutzen?"

                      So, oder so ähnlich sind die Reaktionen...

                      Harzliche Grüße vom Berg
                      http://bergpost.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau
                      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

                      1. Hallo,

                        also nachdem ich jetzt etwas rumgespielt habe:

                        Ich kann doch nur $_SERVER['PHP_SELF'] für mien Vorhaben verwenden. Mit $_SERVER['SCRIPT_NAME'] komme ich doch garnicht an die "Parameter", die in folgender Art übergeben wurde:
                        http://example.file/parameter/parameter
                        ran.

                        Also muss ich doch $_SERVER['PHP_SELF'] verwenden und dann die Parameter entsprechend auslesen ...

                        Gruß

                        1. P.S.: bzw. noch besser $_SERVER['REQUEST_URI']

                          da dann auch so Sachen wie /file/paramezer?blabla

                          wunderbar funktinoiert

                        2. Hello,

                          also nachdem ich jetzt etwas rumgespielt habe:

                          Ich kann doch nur $_SERVER['PHP_SELF'] für mien Vorhaben verwenden. Mit $_SERVER['SCRIPT_NAME'] komme ich doch garnicht an die "Parameter", die in folgender Art übergeben wurde:
                          http://example.file/parameter/parameter
                          ran.

                          Also muss ich doch $_SERVER['PHP_SELF'] verwenden und dann die Parameter entsprechend auslesen ...

                          Du sollst $_SERVER['PHP_SELF'] nicht für das action-Attribut im <form>-Element verwenden.
                          Das hat doch überhaupt nichts zu tun mit dem Auslesen der Paramter.

                          Harzliche Grüße vom Berg
                          http://bergpost.annerschbarrich.de

                          Tom

                          --
                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                          Nur selber lernen macht schlau
                          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

                          1. Hallo,

                            ach gottchen jetzt versteh ichs ... da haben wir wohl aneinander vorbeigeredet ^^

                            OK das erscheint mir logisch!

                            Aber für das andere Vorhaben mit den Parametern kann ich dann durchaus $_SERVER['REQUEST_URI'] verwenden?

                            Gruß

                            1. Hello,

                              ach gottchen jetzt versteh ichs ... da haben wir wohl aneinander vorbeigeredet ^^
                              OK das erscheint mir logisch!

                              Sowas passiert :-)

                              Aber für das andere Vorhaben mit den Parametern kann ich dann durchaus $_SERVER['REQUEST_URI'] verwenden?

                              Das wird ja nicht unkontrolliert verwendet in Deinem Script.

                              REQUEST_URI   ist die ganze Adresszeile ohne den Hostanteil
                              PATH_INFO     ist der Teil hinter der Ressource-Angabe vor den Parametern, also das, was Du suchst
                              QUERY_STRING  ist der Teil hinter dem Fragezeichen, alseo die üblichen GET-Paramter

                              Du müsstest also nur ein explode('/',trim($_SERVER['PATH_INFO'],'/')) durchführen, und hättest Sofort das Array mit Deinen "Inline-Parametern"

                              Harzliche Grüße vom Berg
                              http://bergpost.annerschbarrich.de

                              Tom

                              --
                              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                              Nur selber lernen macht schlau
                              Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

                              1. Hello,

                                REQUEST_URI   ist die ganze Adresszeile ohne den Hostanteil
                                PATH_INFO     ist der Teil hinter der Ressource-Angabe vor den Parametern, also das, was Du suchst
                                QUERY_STRING  ist der Teil hinter dem Fragezeichen, alseo die üblichen GET-Paramter

                                Du müsstest also nur ein explode('/',trim($_SERVER['PATH_INFO'],'/')) durchführen, und hättest Sofort das Array mit Deinen "Inline-Parametern"

                                kleiner Nachtrag:  frage mit if (isset($_SERVER['PATH_INFO'])) vorher nach, ob die Variable überhaupt importiert worden ist. Das wird sie nämlich nur, wenn auch eine Path-Info vorhanden ist.

                                Harzliche Grüße vom Berg
                                http://bergpost.annerschbarrich.de

                                Tom

                                --
                                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                Nur selber lernen macht schlau
                                Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  2. echo $begrüßung;

    da ich leider kein Modrewrite zur Verüfgung habe, habe ich mir überlegt, könnte ich ja die Parameter einfach nach einem agehängten / mit / abgetrennt hinter die index.php stellen.
    http://subdomain.domain.de/index.php/parameter1/parameter2/

    Dieses Feature nennt sich PathInfo.

    Dies könnte ich ja dann mit $_SERVER['REQUEST_URI'] selbst auslesen

    Es gibt sogar ein eigenes Element dafür in $_SERVER.

    ... nun stellt sich mir aber die Frage, ob dies ohne weiteres funktionsfähig ist so, oder ob es da vielleicht eine ungeahnte hürde gibt?

    Mir ist keine Hürde bekannt. Der Apache kann das, und IIS kann das auch.

    Allerdings weiß der Browser nicht, dass index.php schon ausgeführt wird. Für ihn ist das dahinter auch alles noch Pfad. Eingebundene Ressourcen (Images, Javascript- und CSS-Scripts) müsstest du günstigerweise auch von Documentroot ausgehend addressieren.

    echo "$verabschiedung $name";

    1. Allerdings weiß der Browser nicht, dass index.php schon ausgeführt wird. Für ihn ist das dahinter auch alles noch Pfad. Eingebundene Ressourcen (Images, Javascript- und CSS-Scripts) müsstest du günstigerweise auch von Documentroot ausgehend addressieren.

      Hallo,

      danke für eure Antowrten.

      Also wie muss ich das verstehen?

      Wie muss ich dann z.B. ein img addressieren?

      Gruß

      1. Hello out there!

        Eingebundene Ressourcen (Images, Javascript- und CSS-Scripts) müsstest du günstigerweise auch von Documentroot ausgehend addressieren.

        Wie muss ich dann z.B. ein img addressieren?

        Mit absoluter Pfadangabe relativ zum Basis-URI oder mit vollständigem URI.

        See ya up the road,
        Gunnar

        --
        „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
      2. echo $begrüßung;

        Wie muss ich dann z.B. ein img addressieren?

        Mit / anfangend:

        /pfad/zum/bild.png

        Wenn du /index.php/pfad1/pfad2 hat, dann denkt der Browser bei einem <img src="bild.png">, dass pfad2 das Dokument ist, schneidet es weg und fügt bild.jpg an. Das ergibt dann

        /index.php/pfad1/bild.png

        was natürlich Mist ist, weil es diesen Pfad nicht gibt.

        Wenn du noch einen abschließenden / an das pfad2 hängst

        /index.php/pfad1/pfad2/

        würde hingegen nach

        /index.php/pfad1/pfad2/bild.png

        gesucht werden. Also besser so:

        <img src="/pfad/zum/bild.png">

        Das ist immer eindeutig.

        echo "$verabschiedung $name";

  3. Hello out there!

    Also so:
    http://subdomain.domain.de/index.php/parameter1/parameter2/

    So nicht.

    <Gebetsmühle>Verwende für Beispieldomains example.com, example.net, example.org oder auch foo.example, foo.invalid. [RFC2606] NIE Namen angeben, die wirklich existieren! (Man weiß nie, was sich für Inhalt dahinter verbirgt.)</Gebetsmühle>

    Welchen Vorteil bringt 'http://example.net/index.php/parameter1/parameter2/' gegenüber 'http://example.net/index.php?parameter1&parameter2'?

    See ya up the road,
    Gunnar

    --
    „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)