H2o: Umschreiben... nochmal, Entschuldigung!

Erstellt am 4. Feb. 2016  ·  3Kommentare  ·  Quelle: h2o/h2o

Es scheint, dass es einige Benutzer gibt, die danach suchen, wie man URLs in h2o umschreibt. mruby macht es möglich, ist aber nicht klar wie. Ich erkläre schnell meine neueste Herausforderung:

Auf unserem Server müssen wir Abfragezeichenfolgen tatsächlichen Dateien auf dem Server zuordnen; und diese können Leerzeichen enthalten (oder %20, wenn URL-kodiert). Beispielsweise:
example.com/search?item=something%20and%somethingelse sollte die Datei erhalten
example.com/search/something_and_somethingelse

Ich habe die mruby-Beispiele für h2o und die Rack-Spezifikationen gelesen, aber ich verstehe nicht ganz, was ich schreiben muss, um h2o anzuweisen, einen anderen Pfad zu verwenden. Ich kann die Umgebungsvariablen PATH_INFO und QUERY_STRING lesen, aber wie kommuniziere ich die neuen Werte zurück an den h2o-Server ("hier statt dort suchen")?

In einer ähnlichen Notiz fand ich ein scheinbar bekanntes Juwel namens " Rack-Rewrite ". Und ich habe mich gefragt, ob mir das bei meinen Rewrite-Regeln helfen könnte und wie ein solches Juwel mit meinem h2o-Server kombiniert werden könnte. Hast du irgendwo ein Beispiel?

enhancement help wanted mruby

Hilfreichster Kommentar

Ich muss sagen, dass die Verwendung von mruby für jemanden, der von NGINX kommt, sehr mühsam und kompliziert erscheint.

Alle 3 Kommentare

Ich kann die Umgebungsvariablen PATH_INFO und QUERY_STRING lesen, aber wie kommuniziere ich die neuen Werte zurück an den h2o-Server ("hier statt dort suchen")?

Sie sollten reproxy: on in Ihrer Konfigurationsdatei festlegen und eine Antwort mit einem x-reproxy-url Headersatz zurückgeben. Dadurch wird der Reproxy-Handler angewiesen, den Inhalt der mit dem Header angegebenen URL zurückzugeben.
siehe auch: https://h2o.examp1e.net/configure/mruby_directives.html#delegating -request

In einer ähnlichen Notiz fand ich ein scheinbar bekanntes Juwel namens "Rack-Rewrite". Und ich habe mich gefragt, ob mir das bei meinen Rewrite-Regeln helfen könnte und wie ein solches Juwel mit meinem h2o-Server kombiniert werden könnte. Hast du irgendwo ein Beispiel?

Das Umschreiben von Racks hängt von den von Rack bereitgestellten _Bibliotheken_ ab, und ich fürchte, Sie können es nicht wie von mruby verwenden (obwohl es IMO nicht schwer wäre, es auf mruby zu portieren).

Ich verstehe, dass es notwendig ist, Weiterleitungen deklarativer zu spezifizieren, als die Regeln mit mruby aufzuschreiben; Es wäre toll, wenn jemand eine Portierung von Rack-Rewrite oder ähnlichem finden könnte.

Ich danke dir sehr! Jetzt hab ich es verstanden.

Fürs Protokoll - und alle, die etwas Ähnliches suchen: Der folgende Teil der h2o.conf ersetzt ein einzelnes Leerzeichen durch einen Unterstrich in allen URLs unter /test/

ZB https://www.example.com/test/something%20and%20somethingelse wird umgeschrieben in
https://www.example.com/test/something_and_somethingelse

Sollte h2o die neu geschriebene Datei nicht finden, leitet es intern zu einem PHP-Skript um, das - in meinem Fall - eine Suche in einer Datenbank durchführt, um den gewünschten Inhalt abzurufen.

      "/test":
        reproxy: ON
        mruby.handler: |
          lambda do |env|
            if /^\/([^ ]+[ ][^ ]+)/.match(env["PATH_INFO"]) # All URLs with at least one empty space NOT in the beginning or end
              str = "#{$1}"
              str = str.gsub( %r{[ ]}, '_') # replace every single empty space with an underscore
              return [307, {"x-reproxy-url" => "https://www.example.com/test/#{str}"}, []] # reproxy to rewritten URL
            end
            return [399, {}, []]
          end
        file.dir: "/usr/local/www/apache22/data/test/json"   # serve static files if found
        redirect:           # if not found, internally redirect to /test/index.php/<path>
          url: /test/index.php/
          internal: YES
          status: 307

Ich muss sagen, dass die Verwendung von mruby für jemanden, der von NGINX kommt, sehr mühsam und kompliziert erscheint.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

taosx picture taosx  ·  6Kommentare

wujunjenny picture wujunjenny  ·  5Kommentare

kazuho picture kazuho  ·  7Kommentare

Jxck picture Jxck  ·  7Kommentare

chenbd picture chenbd  ·  3Kommentare