H2o: أعد الكتابة ... مرة أخرى ، آسف!

تم إنشاؤها على ٤ فبراير ٢٠١٦  ·  3تعليقات  ·  مصدر: h2o/h2o

يبدو أن هناك عددًا قليلاً جدًا من المستخدمين الذين يبحثون عن كيفية إعادة كتابة عناوين URL في h2o. mruby يجعل ذلك ممكنًا ، لكن ليس من الواضح كيف. أشرح بسرعة التحدي الأخير لي:

على الخادم الخاص بنا ، يتعين علينا تعيين سلاسل الاستعلام للملفات الفعلية الموجودة على الخادم ؛ وقد تتضمن هذه مسافات فارغة (أو٪ 20 عند ترميز URL). على سبيل المثال:
يجب أن يحصل example.com/search؟item=something٪20and٪somethingelse على الملف
example.com/search/something_and_somethingelse

قرأت أمثلة mruby الخاصة بـ h2o ومواصفات Rack ، لكنني لا أفهم تمامًا ما أحتاج إلى كتابته لأخبر h2o باستخدام مسار مختلف. يمكنني قراءة متغيرات البيئة PATH_INFO و QUERY_STRING ، ولكن كيف يمكنني توصيل القيم الجديدة إلى خادم h2o ("انظر هنا بدلاً من هناك")؟

في ملاحظة ذات صلة ، وجدت جوهرة تبدو معروفة جيدًا تسمى " إعادة كتابة الرف ". وكنت أتساءل ، إذا كان هذا قد يساعدني في قواعد إعادة الكتابة الخاصة بي ، وكيف يمكن دمج هذه الأحجار الكريمة مع خادم h2o الخاص بي. هل لديك مثال في مكان ما؟

enhancement help wanted mruby

التعليق الأكثر فائدة

لا بد لي من أن أقول إن استخدام mruby لهذا يبدو مملاً للغاية ومعقدًا لشخص قادم من NGINX.

ال 3 كومينتر

يمكنني قراءة متغيرات البيئة PATH_INFO و QUERY_STRING ، ولكن كيف يمكنني توصيل القيم الجديدة إلى خادم h2o ("انظر هنا بدلاً من هناك")؟

يجب عليك تعيين reproxy: on في ملف التكوين الخاص بك وإرجاع استجابة مع مجموعة x-reproxy-url . هذا يوجه معالج reproxy لإرجاع محتويات عنوان URL المحدد بالرأس.
انظر أيضًا: https://h2o.examp1e.net/configure/mruby_directives.html#delegating -request

في ملاحظة ذات صلة ، وجدت جوهرة تبدو معروفة جيدًا تسمى "إعادة كتابة الرف". وكنت أتساءل ، إذا كان هذا قد يساعدني في قواعد إعادة الكتابة الخاصة بي ، وكيف يمكن دمج هذه الأحجار الكريمة مع خادم h2o الخاص بي. هل لديك مثال في مكان ما؟

تعتمد إعادة كتابة الحامل على _libraries_ التي يوفرها Rack ، وأخشى أنه لا يمكنك استخدامها كما هي من mruby (على الرغم من أن نقلها إلى mruby لن يكون صعبًا من قبل IMO).

أفهم أن هناك حاجة إلى طريقة أكثر وضوحًا لتحديد عمليات إعادة التوجيه بدلاً من كتابة القواعد باستخدام mruby ؛ سيكون من الرائع أن يأتي شخص ما بمنفذ لإعادة الكتابة على الرف أو شيء مشابه.

شكرا جزيلا لك! الان فهمت.

للسجل - وكل من يبحث عن شيء مشابه: يستبدل الجزء التالي من h2o.conf مساحة فارغة واحدة بشرطة سفلية في جميع عناوين URL تحت / test /

على سبيل المثال ، تمت إعادة كتابة https://www.example.com/test/something٪20and٪20somethingelse إلى
https://www.example.com/test/something_and_somethingelse

إذا لم يعثر h2o على الملف المعاد كتابته ، فإنه يعيد التوجيه داخليًا إلى نص PHP والذي - في حالتي - يقوم بالبحث من قاعدة بيانات لجلب المحتوى المطلوب.

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

لا بد لي من أن أقول إن استخدام mruby لهذا يبدو مملاً للغاية ومعقدًا لشخص قادم من NGINX.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

dch picture dch  ·  5تعليقات

Ys88 picture Ys88  ·  5تعليقات

voiddeveloper picture voiddeveloper  ·  6تعليقات

concatime picture concatime  ·  3تعليقات

taosx picture taosx  ·  6تعليقات