Hello, I am struggling with the deployment of a simple Mojolicious::Lite application under Apache ReverseProxy with a relative path. The application base URL looks like this: https://localhost/test. It works fine without /test at the end.
The generated URLs do look fine, but the routes never match. They do match, however, if the path is entered twice, like https://localhost/test/test/show_form. This is my setup on a Debian 8 Jessie: morbo running on http://localhost:3001, works fine when contacted directly. Application URL: https://localhost/test Apache configuration: ProxyPreserveHost On ProxyPass /test http://localhost:3001/ ProxyPassReverse /test http://localhost:3001/ RequestHeader set X-Forwarded-HTTPS "1" The application: #!/usr/bin/env perl use Mojolicious::Lite; use Data::Dumper; hook before_dispatch => sub { my $c = shift; if ( $c->req->headers->header('X-Forwarded-Host') ) { $c->req->url->base->scheme('https'); $c->req->url->base->path('test'); } }; get '/' => sub { my $c = shift; $c->stash( debug => 'url:' . Dumper( $c->req->url ) ); } => 'index'; get 'show_form' => 'menu'; get 'save_form' => sub { my $c = shift; $c->stash( input => $c->param('input') ); } => 'show_saved'; app->start; __DATA__ @@ index.html.ep % layout 'default'; <p><%= link_to('Form' => 'show_form') %>: leads nowhere <br><a href="/test/test/show_form">Form manual link</a>: this works under apache ReverseProxy, but obviously not without <p><%= link_to('Home' => '/') %> <pre><%= stash 'debug' %></pre> @@ layouts/default.html.ep <!DOCTYPE html> <html> <head><title><%= title %></title></head> <body><%= content %></body> </html> @@ menu.html.ep % layout 'default'; This is a test form %= form_for save_form => (method => 'GET') => begin <br>Desc <input type="text" name="input"> <br><input type="submit" value="Save"> % end @@ show_saved.html.ep % layout 'default'; You entered: desc="<%= stash 'input' %>". <br>Return <%= link_to 'home' => '/' %>. And the contents of $c->req->url, as displayed on the first page: url:$VAR1 = bless( { 'path' => bless( { 'charset' => 'UTF-8', 'path' => '/' }, 'Mojo::Path' ), 'query' => bless( { 'pairs' => [] }, 'Mojo::Parameters' ), 'base' => bless( { 'scheme' => 'https', 'path' => bless( { 'charset' => 'UTF-8', 'leading_slash' => '', 'trailing_slash' => '', 'parts' => [ 'test' ] }, 'Mojo::Path' ), 'host' => '127.0.0.1' }, 'Mojo::URL' ) }, 'Mojo::URL' ); As far as I understood the Cookbook#Rewriting <http://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#Rewriting> (not very far, it seems), moving the req->url->path->leading_slash(0) to req->url->base->path->trailing_slash(1) is the way to go. But it is empty in my case and doesn't help. Adding a trailing slash to the URL makes the path appear twice in the links (https://localhost/test/test/show_form) and it matches nicely, e.g. the form appears after clicking on the link. But the form_for URL is correct/wrong again (test/save_form, won't match the route 'save_form'). Yet elsewhere <https://groups.google.com/forum/#!msg/mojolicious/AA4lHwdIyZc/XJBZQ2nrjRUJ> Sebastian suggests to move a chunk from path->parts to base->path->parts. Empty here as well, no matter if the URL contains a trailing slash or not. I tried hypnotoad instead of morbo, production instead of development, adding slashes here and there, but still can't seem to figure it out. -- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/mojolicious. For more options, visit https://groups.google.com/d/optout.
