H2o: Tulis ulang... lagi, maaf!

Dibuat pada 4 Feb 2016  ·  3Komentar  ·  Sumber: h2o/h2o

Tampaknya ada beberapa pengguna yang mencari cara menulis ulang URL di h2o. mruby memungkinkan, tetapi tidak jelas caranya. Saya dengan cepat menjelaskan tantangan terbaru saya:

Di server kami, kami harus memetakan string kueri ke file aktual di server; dan ini mungkin termasuk spasi kosong (atau %20 saat dikodekan URL). Sebagai contoh:
example.com/search?item=something%20and%somethingelse harus mendapatkan file
example.com/search/something_and_somethingelse

Saya membaca contoh mruby untuk h2o dan spesifikasi Rack , tetapi saya tidak begitu mengerti apa yang perlu saya tulis untuk memberi tahu h2o untuk menggunakan jalur yang berbeda. Saya dapat membaca variabel lingkungan PATH_INFO dan QUERY_STRING, tetapi bagaimana cara mengomunikasikan nilai baru kembali ke server h2o ("lihat di sini alih-alih di sana")?

Pada catatan terkait, saya menemukan permata yang tampaknya terkenal bernama " rack-rewrite ". Dan saya bertanya-tanya, apakah ini dapat membantu saya dengan aturan penulisan ulang saya, dan bagaimana permata seperti itu dapat digabungkan dengan server h2o saya. Apakah Anda punya contoh di suatu tempat?

enhancement help wanted mruby

Komentar yang paling membantu

Saya harus mengatakan bahwa menggunakan mruby untuk ini tampaknya sangat membosankan dan rumit bagi seseorang yang berasal dari NGINX.

Semua 3 komentar

Saya dapat membaca variabel lingkungan PATH_INFO dan QUERY_STRING, tetapi bagaimana cara mengomunikasikan nilai baru kembali ke server h2o ("lihat di sini alih-alih di sana")?

Anda harus mengatur reproxy: on di file konfigurasi Anda dan mengembalikan respons dengan set header x-reproxy-url . Itu menginstruksikan penangan reproxy untuk mengembalikan konten URL yang ditentukan dengan header.
lihat juga: https://h2o.examp1e.net/configure/mruby_directives.html#delegating -request

Pada catatan terkait, saya menemukan permata yang tampaknya terkenal bernama "rack-rewrite". Dan saya bertanya-tanya, apakah ini dapat membantu saya dengan aturan penulisan ulang saya, dan bagaimana permata seperti itu dapat digabungkan dengan server h2o saya. Apakah Anda punya contoh di suatu tempat?

Rack-rewrite tergantung pada _libraries_ yang disediakan oleh Rack, dan saya khawatir Anda tidak dapat menggunakannya seperti dari mruby (meskipun IMO porting ke mruby tidak akan sulit).

Saya mengerti ada kebutuhan untuk cara yang lebih deklaratif untuk menentukan pengalihan daripada menuliskan aturan menggunakan mruby; akan sangat bagus jika seseorang dapat membuat port untuk penulisan ulang rak atau yang serupa.

Terima kasih banyak! Sekarang saya paham.

Sebagai catatan - dan semua orang mencari sesuatu yang serupa: Bagian berikut dari h2o.conf menggantikan satu ruang kosong dengan garis bawah di semua URL di bawah /test/

Misalnya https://www.example.com/test/something%20and%20somethingelse ditulis ulang menjadi
https://www.example.com/test/something_and_somethingelse

Jika h2o tidak menemukan file yang ditulis ulang, itu secara internal dialihkan ke skrip PHP yang - dalam kasus saya - membuat pencarian dari database untuk mengambil konten yang diinginkan.

      "/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

Saya harus mengatakan bahwa menggunakan mruby untuk ini tampaknya sangat membosankan dan rumit bagi seseorang yang berasal dari NGINX.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

basbebe picture basbebe  ·  3Komentar

wujunjenny picture wujunjenny  ·  5Komentar

utrenkner picture utrenkner  ·  8Komentar

concatime picture concatime  ·  3Komentar

Ys88 picture Ys88  ·  5Komentar