H2o: Réécrivez... encore une fois, désolé !

Créé le 4 févr. 2016  ·  3Commentaires  ·  Source: h2o/h2o

Il semble qu'il y ait pas mal d'utilisateurs qui cherchent comment réécrire les URL dans h2o. mruby le permet, mais on ne sait pas comment. J'explique rapidement mon dernier défi :

Sur notre serveur, nous devons mapper les chaînes de requête aux fichiers réels sur le serveur ; et ceux-ci peuvent inclure des espaces vides (ou %20 lorsqu'ils sont encodés en URL). Par example:
example.com/search?item=something%20and%somethingelse devrait obtenir le fichier
example.com/search/something_and_somethingelse

J'ai lu les exemples mruby pour h2o et les spécifications du

Sur une note connexe, j'ai trouvé un joyau apparemment bien connu appelé " rack-rewrite ". Et je me demandais si cela pourrait m'aider avec mes règles de réécriture, et comment un tel joyau pourrait être combiné avec mon serveur h2o. Avez-vous un exemple quelque part ?

enhancement help wanted mruby

Commentaire le plus utile

Je dois dire que l'utilisation de mruby pour cela semble très fastidieuse et compliquée pour quelqu'un venant de NGINX.

Tous les 3 commentaires

Je peux lire les variables d'environnement PATH_INFO et QUERY_STRING, mais comment puis-je communiquer les nouvelles valeurs au serveur h2o ("regardez ici au lieu de là") ?

Vous devez définir reproxy: on dans votre fichier de configuration et renvoyer une réponse avec un ensemble d'en-têtes x-reproxy-url . Cela indique au gestionnaire de reproxie de renvoyer le contenu de l'URL spécifiée avec l'en-tête.
voir aussi : https://h2o.examp1e.net/configure/mruby_directives.html#delegating -request

Sur une note connexe, j'ai trouvé un joyau apparemment bien connu appelé "rack-rewrite". Et je me demandais si cela pourrait m'aider avec mes règles de réécriture, et comment un tel joyau pourrait être combiné avec mon serveur h2o. Avez-vous un exemple quelque part ?

Rack-rewrite dépend des _libraries_ fournies par Rack, et je crains que vous ne puissiez pas l'utiliser tel quel depuis mruby (bien que l'OMI le porte sur mruby ne soit pas difficile).

Je comprends qu'il est nécessaire d'avoir un moyen plus déclaratif de spécifier les redirections plutôt que d'écrire les règles à l'aide de mruby ; ce serait formidable si quelqu'un pouvait proposer un port de réécriture en rack ou quelque chose de similaire.

Merci beaucoup! Maintenant j'ai compris.

Pour mémoire - et tous ceux qui recherchent quelque chose de similaire : la partie suivante de h2o.conf remplace un seul espace vide par un trait de soulignement dans toutes les URL sous /test/

Par exemple, https://www.example.com/test/something%20and%20somethingelse est réécrit en
https://www.example.com/test/something_and_somethingelse

Si h2o ne trouve pas le fichier réécrit, il redirige en interne vers un script PHP qui, dans mon cas, effectue une recherche dans une base de données pour récupérer le contenu souhaité.

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

Je dois dire que l'utilisation de mruby pour cela semble très fastidieuse et compliquée pour quelqu'un venant de NGINX.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

taosx picture taosx  ·  6Commentaires

fetus-hina picture fetus-hina  ·  4Commentaires

dch picture dch  ·  5Commentaires

basbebe picture basbebe  ·  3Commentaires

utrenkner picture utrenkner  ·  7Commentaires