サブディレクトリの Apache (共有ホスティング) で小さな Mojolicious Lite アプリを実行しようとしています: 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
ます 。しかし、にアクセスすると、CSS パスがあり、スタイルが適用されません。/mymojoapp/
/mymojoapp/css/normalize.css
http://www.example.com/mymojoapp/u/someuser
/mymojoapp/u/someuser/css/normalize.css
いくつかの書き換えルールが欠けているように感じます。または、おそらくbefore_dispatch
フックで修正できる可能性がありますが、これまでのところ、それを理解できませんでした。
アプリで生成されたすべてのページが正しいベース URL を取得するようにするにはどうすればよいですか?