1

サブディレクトリの 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内容 ( +perlmlperlMojolicious を含むユーザーがインストールしたモジュールへのパスです):

#!/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.epcss (および画像) を として参照し<link rel="stylesheet" href="<%= url_for %>/css/styles.css">ます。ベース URL ( ) にアクセスすると、適切なスタイルhttp://www.example.com/mymojoapp/でページが表示されurl_forます 。しかし、にアクセスすると、CSS パスがあり、スタイルが適用されません。/mymojoapp//mymojoapp/css/normalize.csshttp://www.example.com/mymojoapp/u/someuser/mymojoapp/u/someuser/css/normalize.css

いくつかの書き換えルールが欠けているように感じます。または、おそらくbefore_dispatchフックで修正できる可能性がありますが、これまでのところ、それを理解できませんでした。

アプリで生成されたすべてのページが正しいベース URL を取得するようにするにはどうすればよいですか?

4

1 に答える 1