Я пытаюсь запустить крошечное приложение Mojolicious Lite на Apache (общий хостинг) в подкаталоге: http://www.example.com/mymojoapp/
. В основном я старался следовать этому руководству.
mymojoapp
— это фактический каталог на сервере, а структура приложения выглядит следующим образом:
mymojoapp
|- .htaccess
|- app.pl
|- public
| +- images
| | +- ... (image files) ...
| +- css
| | +- ... (css files) ...
| +- js
| +- ... (js files) ...
+- templates
|- layouts
| |- index-layout.html.ep
| +- other-page-layout.html.ep
|- index.html.ep
+- other-page.html.ep
.htaccess
содержание:
AddHandler cgi-script .pl
Options +ExecCGI
IndexIgnore *
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/public/%{REQUEST_URI} -f
RewriteRule ^(.*)$ public/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ app.pl/$1 [L]
app.pl
содержимое (perlml
это perl
+ пути к установленным пользователем модулям, включая Mojolicious):
#!/usr/bin/perlml
use Mojolicious::Lite;
hook before_dispatch => sub {
my $c = shift;
$c->req->url->base(Mojo::URL->new(q{http://www.example.com/mymojoapp/}));
};
get '/' => 'index';
get '/u/:username' => sub {
my $self = shift;
$self->stash(profile => $self->stash('username'));
} => 'user-profile-page';
app->secrets(['app','secrets']);
app->start;
И в index-layout.html.ep
, и в other-page-layout.html.ep
я называю css (и изображения) <link rel="stylesheet" href="<%= url_for %>/css/styles.css">
. Когда я получаю доступ к базовому URL-адресу (http://www.example.com/mymojoapp/
), страница отображается с правильным стилем, потому что url_for
дает мне /mymojoapp/
путь к таблице стилей = /mymojoapp/css/normalize.css
. Но когда я получаю доступ к http://www.example.com/mymojoapp/u/someuser
, путь CSS равен /mymojoapp/u/someuser/css/normalize.css
, и стили не применяются.
Я чувствую, что мне не хватает каких-то правил перезаписи, или это, вероятно, можно исправить в хуке before_dispatch
, но пока я не мог понять это.
Как я могу убедиться, что все страницы, созданные в моем приложении, получают правильный базовый URL-адрес?