2016-03-23 10 views
0

私はthymeleafでスプリングブートを使用しています。すべてのリソースは、"/../../css/main.css"のようなパス上のスプリングアプリケーションの外側にあります。 dev envでは、URLを使用してパスを解決し、パス上にlive envを実行します。springリソースハンドラが処理されない/../**

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    String templates=env.getProperty("spring.thymeleaf.prefix"); 
    registry.addResourceHandler("/../../css/**") 
      .addResourceLocations(templates); 
} 
// spring.thymeleaf.prefix = http://website.com/assets/ 

なぜリソースハンドラは、リソースのこれらの種類を処理していないが、私"/**"は問題なく処理している場合はどうなりますか?何か不足していますか?

編集:resourceHandler"/css/**"で、場所はURLです

答えて

1

リソースを探すリゾルバには、classpathから外部リソースを参照することはできません。

は、この問題のようにそれを行うようにしてください - Add external resources folder to Spring Bootまたはこの中で - How do I use Spring Boot to serve static content located in Dropbox folder?

+0

ありがとうございます。これは実際にライブサーバーでは機能しますが、開発者とテストでは、リソースにローカルでアクセスすることができず、httpにアクセスする唯一の方法なので、このアイデアをあきらめました。私は 'ResourceResolver'でurlでパスを修正して解決しようとしています。残念ながら、一致したリソースハンドラ( '/../../css/http:// website.com/assets /')からのパスを先読みしていて、 'ResourceResolver'からそれを削除する方法はありません。私はそのために何を上書きしなければならないか探し続けています – user2035693

+0

あなたのリソースが外部リソースに置かれている場合、なぜこのリソースに対して 'CDN'のようなものを作成しなかったのですか?静的リソースとそれを参照する別のプロジェクトを作成します。 – sanluck

+0

残念ながら、私は自分の望むことをするためにそのサーバーにアクセスすることはできません – user2035693

1

のいずれかを処理されていない場合、私はaddResourceHandlerに..使用することは有効ではありませんが、私はそれをバックアップするためのマニュアルを持っていないことをかなり確信しています。パスは、サーバーがブラウザに表示されていないものを取得するパターンを記述しています。関数docから: "指定されたURLパスパターンに基づいて"。ブラウザーから参照すると、サーバーに送信される絶対パスに変更されます。これはあなたの他のバージョンが問題なく動作する理由です。

+0

私が書くとき、 '<番目のリンク:のhref = "@ {/../../ CSS /のmain.css}"/ > 'これはサーバー上のパスですが、スプリングブートやタイムリーフによる可視パスではありません。したがって、可視のパスが処理されていないため、理解するためには? – user2035693

+0

そのパスはブラウザ上で解決されているので、サーバーは参照を認識しないため、パスに一致するパターンでは使用できません。 –

関連する問題